我的Lychrel数字查找器出了什么问题?

时间:2013-05-03 19:51:42

标签: python lychrel-numbers

我正在尝试解决Project Euler problem #55,其中指出:

  

如果我们采取47,反向并添加,47 + 74 = 121,这是回文。

     

并非所有数字都如此迅速地产生回文。例如,

     

349 + 943 = 1292,1292 + 2921 = 4213,4213 + 3124 = 7337

     

也就是说,349花了三次迭代才到达回文。

     

虽然还没有人证明这一点,但据认为有些数字,   像196,永远不会产生回文。一个永远不会形成的数字   回文中的回文和添加过程称为Lychrel   数。由于这些数字的理论性质,并为   这个问题的目的,我们假设一个数字是Lychrel   直到证明不然。此外,每个人都可以获得   数字低于一万,它将(i)成为一个回文   少于五十次迭代,或者(ii)没有人,具有所有计算   迄今为止存在的权力已将其映射到回文。在   事实上,10677是第一个需要超过50的数字   在产生回文之前的迭代:4668731596684224866951378664   (53次迭代,28位)。

     

令人惊讶的是,它们本身就有回文数字   Lychrel数字;第一个例子是4994。

     

有多少Lychrel数字低于一万?

TL; DR:如果数字不是回文,请将其添加到自身的反面。仍然没有?重复。 ...之后50次迭代...... 这是一个Lychrel数字。

我的代码:

def isPalindrome(n):
    return str(n)[::-1] == str(n)

lychrels = 0

for i in range(1,10000):
    lychrel = True
    for j in range(50):
        if isPalindrome(i):
            lychrel = False
            break

        else:
            i += int(str(i)[::-1])

    if lychrel:
        lychrels += 1

print(lychrels)

它适用于349(非Lychrel)和196(Lychrel)的测试用例,但Project Euler拒绝了我得到的答案。

尚未尚未解决问题,所以我希望提示而非直接解决方案。

我做错了什么?

1 个答案:

答案 0 :(得分:4)

你做出一个错误的假设,假设一个数字开始作为回文而不是lychrel。我认为这是你唯一的错误。