此代码符合project euler problem no.4。
回文数字两种方式相同。由两个2位数字的乘积制成的最大回文是9009 = 91×99。
找出由两个3位数字的乘积制成的最大回文。
预期输出为906609
,但此代码的输出为994009
。
from array import *
def is_palindrome(num):
a = array('i',[])
j=0
while(num>0):
a.insert(j,num%10)
num=num/10
j+=1
if(a[0]==a[j-1]):
return True
else:
return False
a=100
b=100
max=0
c=False
while(a<=999):
while(b<=999):
n=a*b
c=is_palindrome(n)
if(c and n>max):
max = n
b+=1
b=100
a+=1
print(max)
答案 0 :(得分:0)
您的is_palindrome()
函数错误,您只检查第一个元素是否等于最后一个元素,如果它们相等则返回True
,如果不相等则返回False
。
if(a[0]==a[j-1]):
return True
else:
return False
显然,这是错误的 -
回文是一个单词,短语,数字或其他字符序列,它们向后或向前读取相同的字符。
is_palindrome()函数的简单解决方案是 -
def is_palindrome(num):
s = str(num)
n = len(s)
return all(s[i] == s[n-i-1] for i in range(0,int(n/2)))
答案 1 :(得分:0)
你正在过度思考你的回文:P如果一个回文在前进和后退中读取相同的结果,那么......反转你的数字。
def is_Palindrome(num):
return str(num) == str(num)[::-1]
步长为-1的切片与反转相同。
(另外,作为项目euler的一般化的东西,但是对于这个问题可能没有必要...当你想要最大的数字时,不要从底部开始迭代,从顶部开始迭代,并在你再也无法击败目前最好的答案了。)