回文数的两种读法都是一样的。由两个 2 位数乘积构成的最大回文数是 9009 = 91 × 99。
求由两个 3 位数乘积构成的最大回文数。
以下是我对这个问题的解决方案。它有效,但我注意到另一个使用的解决方案
if x*y < max_seen: continue
像这样:
def biggest():
big_x, big_y, max_seen = 0, 0, 0
for x in xrange(999,99,-1):
for y in xrange(x, 99,-1):
if x*y < max_seen: continue
if is_palindrome(x*y):
big_x, big_y, max_seen = x,y, x*y
我不明白那条线是如何工作的。第一次通过max_seen = 0
,第一次x*y
大于999*999
0。因此不满足该条件并运行下一行。说得通。然而,最终max_seen
会比它更大x*y
,为什么会在continue
这里呢?
似乎甚至不需要这条线,因为如果条件满足或不满足,程序无论如何都会继续。我怀疑我不了解continue
Python 的工作原理。
这是我的方法:
def find_biggest():
big_x, big_y, new_pal, max_seen = 0, 0, 0, 0
for x in range(999, 100, -1):
for y in range(x, 100, -1):
if is_palindrome(x*y) == True:
new_pal = x*y
if new_pal > max_seen:
big_x, big_y, max_seen = x, y, new_pal
从效率的角度来看,程序应该在所有 new x*y
are时立即退出< max_seen
,但999*100
小于998*900
(意味着它还不能停止,因为它仍然需要检查998*y
,997*y
等)那么你将如何编码呢?