1 - 回文十进制数

2017-10-19  本文已影响33人  changsanjiang

如果把某个数的各个数字按相反的顺序排列, 得到的数和原来的数相同, 则这个数就是回文数. 例如: 12321 就是一个回文数.

问题

求用十进制, 二进制, 八进制表示 都是回文数的所有数字中, 大于十进制数10的最小值.

本例中的十进制数 9 小于 10, 因此不符合要求. 
例如: 9(十进制) = 1001(二进制数) 
              = 11(八进制数) 

思路

因为是二进制的回文数, 所以如果最低位为0, 那么相应地最高位也是0, 但是以0开头肯定是不恰当的, 由此可知最低位为1.
如果用二进制表示时, 最低位为1, 那么这个数一定是奇数, 因此只考虑奇数的情况就可以.
接下来就可以写简单地程序, 从 10 的下一个数字 11 开始, 按顺序搜索.

num = 11

while true
    decStr = num.to_s
    octStr = num.to_s(8)
    binStr = num.to_s(2)
    if decStr == decStr.reverse &&
        octStr == octStr.reverse &&
        binStr == binStr.reverse then
        puts "num = #{num}"
        break;
    end
    
    # 只搜索奇数 每次加2
    num += 2
end

答案

十进制 : 585
八进制 : 1111
二进制 : 1001001001

上一篇 下一篇

猜你喜欢

热点阅读