所以我试图解决的挑战是找到由两个3位数字产品组成的最大回文。我是Python的新手,所以我的代码还不够优雅或折射,但有一个逻辑错误,我似乎无法找到。查找Python中两个3位数字的最大回文数
def ispalindrome(n):
rev_n = str(n)[::-1]
if n == rev_n:
return True
else:
return False
first_num = 100
second_num = 100
mylist=[]
while first_num < 1000:
while second_num < 1000:
item = first_num * second_num
mylist.append(item)
second_num += 1
second_num = 100
first_num +=1
# print (mylist)
num_as_string = []
for i in mylist:
i = str(i)
num_as_string.append(i)
print("Total products of two 3-digit numbers: {}").format(len(num_as_string))
print("-----------------------------------------------------")
def convert_to_num_list(string_list):
new_num_list = []
item = int(string_list)
new_num_list.append(item)
return new_num_list
palindrome_list = []
for j in num_as_string:
if ispalindrome(j) == True:
palindrome_list.append(j)
palindrome_list.sort()
# print(palindrome_list)
x = convert_to_num_list(j)
largest_palindrome = max(x)
print("Total palindroms of product of two 3-digit numers: {}").format(len(palindrome_list))
print("Largest palindrome = {}").format(largest_palindrome)
问题是我得到的最大回文数是580085,它是995 * 583,但不是最大的回文。我相信最大的回文是906609,这是993 * 913,但我的代码没有找到。任何人都可以帮我解决我逻辑中的缺陷吗?
如果你想形成数量最多,为什么从100开始,上升到1000?如果你从999开始到100(一次在每个柜台一个单位),你可以在第一个回文时立即停止搜索。 – jsbueno
@jsbueno谢谢。这听起来像是获得这一结果的最有效方式。 – Burner918
@jsbueno这种做法当然不会发生在我身上。这显然是有效的,如果我使用900万个数字而不是900个,我会对这个建议感到高兴。但我怀疑它也可能很难得到正确的答案。 – BoarGules