def palin(k):
if(str(k) == str(k)[::-1]):
return True
p = 0
f = 0
while True:
for i in range(100,1000):
for k in range(100,1000):
f = i*k
if(palin(f)):
p = f
break;
print(p)
我已经知道了解决它的其他方法,但无法理解这段代码的错误。它给出了580085 asnwer。
答案 0 :(得分:2)
问题是你假设产生的最后一个数字是最大的。这是一个糟糕的假设。 The last 10 palindromes found by your loop plotted.(or last 50。希望这是一个永久链接)。你可以看到发现的回文的大小反弹。 906609是发现的 3rd 最后一个回文。
不要无条件地重新分配,而是首先确保数字更大:
for i in range(100,1000):
for k in range(100,1000):
f = i*k
if(palin(f) and f > p): # Here
p = f
几个附注
palin
最好写成:
def palin(k):
return (str(k) == str(k)[::-1])
明确返回True
,并依赖自动None
返回看起来很乱。
整个while true
... break
部分是不必要的。你想永远循环,但在第一个循环中打破?
只需写下:
def palin(k):
return (str(k) == str(k)[::-1])
p = 0
f = 0
for i in range(100,1000):
for k in range(100,1000):
f = i*k
if(palin(f) and f > p):
p = f
print(p)