使用python的project euler#4最大回文
谁能告诉我上面这个问题出了什么问题吗。我没有得到最后的答案 Q) 回文数字的两种读取方式相同。由两个两位数的乘积构成的最大回文是9009=91×99使用python的project euler#4最大回文,python,palindrome,Python,Palindrome,谁能告诉我上面这个问题出了什么问题吗。我没有得到最后的答案 Q) 回文数字的两种读取方式相同。由两个两位数的乘积构成的最大回文是9009=91×99 从两个3位数字的乘积中找出最大的回文。我认为您误解了我在代码中看到的问题。 问题: 回文数字的两种读取方式相同。由两个两位数的乘积构成的最大回文是9009=91×99。 所以在这个例子中,回文是9009,因为当你向前和向后阅读它时,它仍然是9009。 问题是找到两个3位数的数字,当它们相乘时,会得到最大的回文数 因为最大的回文可能是913x993=
从两个3位数字的乘积中找出最大的回文。我认为您误解了我在代码中看到的问题。 问题: 回文数字的两种读取方式相同。由两个两位数的乘积构成的最大回文是9009=91×99。 所以在这个例子中,回文是9009,因为当你向前和向后阅读它时,它仍然是9009。 问题是找到两个3位数的数字,当它们相乘时,会得到最大的回文数 因为最大的回文可能是913x993=906609 因此,您的代码将简化为这样
product=1
ans=[]
for i in range(100,999):
for j in range(100,999):
product=i*j
temp=product
while(product>0):
rev=1
dig=product%10
rev=rev*10+dig
product=product//10
if(temp==rev):
ans.append(rev)
print(ans)
从这个问题中,我实际上会反转范围(1000100,-1)
因为我们正在寻找最大的,所以最好是反向工作。欧拉计划特别告诉你,如果你不能解决它,你就不能解决它。一行代码只是为了好玩:
打印(排序([i*j代表范围内的i(999,99,-1)代表范围内的j(i,99,-1),如果str(i*j)=(str(i*j))[:-1]][-1])
ans = 0
for i in range(100, 999):
for j in range(100, 999):
product = str(i * j)
if int(product) > ans: # check if the value is bigger then the last palindrome.
if product == product[::-1]: # check if it is a palindrome.
ans = int(product)
print(ans)