問題:
求用十進制、二進制、八進制表示都是迴文數的所有數字中,大於十進制數 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。