回文数 @鍋パーティー
【問】「『ある数字を10進数表記して、それをひっくり返したものともとの数を足す』 という処理を回文数が出てくるまで繰り返すとき、一番遅く回文数になる2桁の数字はどれか。ただし処理をする前から回文数の物は一度目を処理をして続ける。」
先日の鍋パーティーで出題した問題ですが、これが意外と奥深い。もとは数学の問題だが、この鍋パーティーが我が所属するPC部の物だったため、プログラムを組んで答えを出すということに。
pythonで組んだのがこちら
def solve(a): cnt=0 while(1): b=int(str(a)[::-1]) if a==b and cnt!=0: break a+=b cnt+=1 return cnt for a in range(10,100): print str(a)+" "+str(solve(a))
ひっくり返す処理にはreverseではリスト化する必要があるので[::-1]でスライスしました。
結果 98と89が回文数になるまで24回かかるということになりました。
なんとこの問題、3桁の数字まで拡張するとまだ未解決な問題なのです。
やってみるとわかりますが、solve(196)だとどのようなスパコンでも終わらないと思います。
それでいて無限に続くのかどうかもわからない。
なんとも奥の深い問題です。