最大的回文产品python

时间:2014-06-07 17:04:15

标签: python

我试图做的是找到由两个3位数字的乘积制成的最大的回文。 (以下代码的代码)现在我知道最大的数字是906609或913 * 993.现在我遇到的问题是下面的代码将找不到该数字。由于代码现在它发现90909是最大的

for x in xrange(0, 1000):
    for y in xrange(0, 1000):
        #print '%d * %d = %d' % (x, y, x*y)
        num = (x * y)
        q = list(str(x * y))
        q.reverse()
        w = q
        #print(w)
        s = filter(str.isdigit, repr(q))
        q = int(s)
        #print(q)
        if num == q:
            hold3 = num, q, x , y
            print(hold3)

print(hold3)

现在,如果我将for中的数字更改为914和994.它将给出906609的答案。 我想知道为什么我得到两个不同的号码。对不起,我对python很新。

for x in xrange(0, 914):
    for y in xrange(0, 994):
        #print '%d * %d = %d' % (x, y, x*y)
        num = (x * y)
        q = list(str(x * y))
        q.reverse()
        w = q
        #print(w)
        s = filter(str.isdigit, repr(q))
        q = int(s)
        #print(q)
        if num == q:
            hold3 = num, q, x , y
            print(hold3)

print(hold3)

2 个答案:

答案 0 :(得分:2)

两个代码都找到906609.但是,第一个代码会用后面的结果覆盖它。

您需要检查您发现的当前回文是否比您之前找到的要大,如果没有忽略它。

轻微调整代码:

largest = 0
for x in xrange(0, 1000):
    for y in xrange(0, 1000):
        #print '%d * %d = %d' % (x, y, x*y)
        num = (x * y)
        q = list(str(x * y))
        q.reverse()
        w = q
        #print(w)
        s = filter(str.isdigit, repr(q))
        q = int(s)
        #print(q)
        if num == q and num > largest:
            largest = num
            hold3 = num, q, x , y
            print(hold3)

print(hold3) # correctly shows 906609 is the largest number

答案 1 :(得分:1)

这是因为906609是最大的回文产品,但对应于x999的最大值的回文数,{{{} 1}})。

更新前检查:

y == 91

您需要初始化,例如 if num == q and num > hold3[0]: