我试图做项目欧拉问题nr.4;
首先,我的代码无缘无故地以999、91停止;
但这不是该问题的核心,如果您能找到该问题ID的解决方案,也希望听听您的回答!
但是,我现在的问题是,我希望for循环稍后开始,因为我不想等待所有迭代直到999:
我的代码如下:
num=0
rev=0
for a in range(1000):
for b in range(1000):
num=a*b
rev=int(str(num)[::-1])
if num==rev and num!=0 and rev!=0:
print(a,b,num,rev)
工作正常,但是有两个问题:
第一;当我将range(1000)更改为range(100,1000)时,它无缘无故地停在995而不是999。
秒:它没有得到906609的真实答案: 因为它停在999、91,直到1001才找到另一个回文数。
是的,我希望你能帮助我ty:)
答案 0 :(得分:1)
您的代码不会止于发现的最大值,而只是发现的最后一个值。 a
击中991
后,为了满足回文数,最后一个值b
可能是91
。
如果您想获得最大的价值,就需要对产生的最大值进行计数,如下所示:
max_a, max_b, max_num = 0, 0, 0
for a in range(1000):
for b in range(1000):
num=a*b
rev=int(str(num)[::-1])
if num==rev and num!=0 and rev!=0:
if num > max_num:
max_a, max_b, max_num = a, b, num
print(max_a, max_b, max_num) # 913 993 906609
答案 1 :(得分:0)
num=0
rev=0
max_num=0
for a in range(100, 1000):
for b in range(100, 1000):
num=a*b
rev=int(str(num)[::-1])
if num==rev and num!=0 and rev!=0:
if num>max_num:
max_num=num
print(a,b,num,rev, max_num)
为我做了!我刚刚因@Chrispresso修复了大脑故障!比他的建议还简单!我只需要添加一个max_num变量!谢谢大家的宝贵时间!