【发布时间】:2017-05-28 07:12:18
【问题描述】:
所以我要解决的挑战是找到由两个 3 位数字的乘积构成的最大回文数。我是 Python 新手,所以我的代码还不是优雅的或折射的,但是我似乎找不到一个逻辑错误。
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 我当然没有想到这种方法。这显然是有效的,如果我使用 900 万个数字而不是 900 个数字,我会很高兴这个建议。但我怀疑它也可能很难做到正确。
-
问题很快就会变得更难,甚至更早的问题可能会以截然不同的数字出现,我们必须重新考虑策略。与 Project Euler 一起玩吧! :-)
标签: python palindrome