我试图做的是找到由两个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)
答案 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
是最大的回文产品,但不对应于x
(999
的最大值的回文数,{{{} 1}})。
更新前检查:
y == 91
您需要初始化,例如 if num == q and num > hold3[0]:
。