问题:
求用十进制、二进制、八进制表示都是回文数的所有数字中,大于十进制数 10 的最小值。
package main
import (
"fmt"
"strconv"
)
func reverse(s string)string{
n := len(s)
var sliRev []byte
for i:=n-1;i>=0;i--{
sliRev = append(sliRev, s[i])
}
return string(sliRev)
}
func judge(in int)bool{
decStr := strconv.Itoa(in)
octStr := fmt.Sprintf("%o", in)
binStr := fmt.Sprintf("%b", in)
decStrRev := reverse(decStr)
octStrRev := reverse(octStr)
binStrRev := reverse(binStr)
return decStr == decStrRev && octStr == octStrRev && binStr == binStrRev
}
func main(){
for i:=11;i<1000;i+=2{
if judge(i){
fmt.Println(i, "is palindromic.")
}
}
}
这是比较麻烦的方法:
二进制的回文数必然是1xxx1这样的数,所以必是奇数,从11开始逐个判断;
把数转成二进制和八进制的字符串形式,然后逆序拼接成字符串;
3种进制的情况下分别对新字符串和原字符串进行比较,全都相同的数(11到1000以内)我只找到了585。
©著作权归作者所有:来自51CTO博客作者stlf2004的原创作品,如需转载,请注明出处,否则将追究法律责任