import math
thevalue = 0
for x in range (100,999):
for y in range (100,999):
mynum=x*y
mynum_str=str(mynum)
for z in range(0,math.floor(len(mynum_str)/2)):
if mynum_str[0+z] != mynum_str[len(mynum_str)-1-z]:
break
else:
if (len(mynum_str)-1-z) -1 == z:
thevalue = mynum
print(thevalue)
给了我580085,这不是正确答案(假设超过900000)...... 正在处理http://projecteuler.net/problem=4 ...关于我哪里出错的提示?
答案 0 :(得分:7)
您不需要过于复杂的循环来检查数字的回文性质:
# Using extended slice notation to reverse the string
if str(n) == str(n)[::-1]:
print "Palindrome!"
至于完整的解决方案,您的程序只是在寻找 a 回文编号。有多个回文数字是3位数的乘积。你想要最大的那些。
(当然,这不是完整的解决方案 - 但如果我们只是给你一个项目欧拉挑战的解决方案就没有乐趣了;)
答案 1 :(得分:0)
有一种更简单的检查回文的方法。只需反转字符串并将其与原始字符串进行比较:if(mynum_str == mynum_str[::-1])
你得到580085的原因是你的程序只打印出它找到的最后一个值。 (有2470种可能的回文。)尝试将它们存储在列表中并对其进行排序,或者只保留最大版本:
import math
import string
maxpalindrome = 0
for x in range (100,999):
for y in range (100,999):
mynum=x*y
mynum_str=str(mynum)
if(mynum_str == mynum_str[::-1]):
maxpalindrome = max(string.atoi(mynum_str), maxpalindrome)
print(maxpalindrome)