読者です 読者をやめる 読者になる 読者になる

Problem 36

Problem 36

585 = 1001001001 (2進) は10進でも2進でも回文数である.
100万未満で10進でも2進でも回文数になるような数の総和を求めよ.
(注: 先頭に0を含めて回文にすることは許されない.)


あまり面白みのありそうな問題でもないので、
とりあえず力技のやっつけ仕事で答えてみます。
2進数にする関数とか標準ライブラリで存在しないのでしょうか。
ま、頻出する機能でもないので別に要らないですが…。

def bin(n):
    ret = ''
    while 0 < n:
        ret = str(n & 1) + ret
        n >>= 1
    return ret

def is_circular(s):
    for i in xrange(len(s) / 2):
        if s[i] != s[-(1 + i)]:
            return False
    return True

total = 0
for n in xrange(10 ** 6):
    s10 = str(n)
    if not is_circular(s10):
        continue
    
    s2 = bin(n)
    if not is_circular(s2):
        continue
    
    total += n

print total

答えは 872,187 で、実行時間は 3.407 [sec] でした。