如果把某个数的各个数字按相反的顺序排列, 得到的数和原来的数相同, 则这个数就是回文数
. 例如: 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
网友评论