迴文數

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

這是比較麻煩的方法:

  1. 二進制的迴文數必然是1xxx1這樣的數,所以必是奇數,從11開始逐個判斷;
  2. 把數轉成二進制和八進制的字符串形式,然後逆序拼接成字符串;
  3. 3種進制的情況下分別對新字符串和原字符串進行比較,全都相同的數(11到1000以內)我只找到了585。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章