【发布时间】:2020-12-22 20:13:50
【问题描述】:
回文数的两种读法相同。由两个 2 位数字的乘积构成的最大回文数是 9009 = 91 × 99。
找出两个 3 位数字乘积的最大回文数。
a = 999
c = 999
def multi():
global a
a = a - 1
global c
c = 999
for i in range(99, 1000):
n = a * c
c -= 1
print('%s * %s = %s.' % (a, c, n))
if str(n)[0] == str(n)[-1] and str(n)[1] == str(n)[-2] and str(n)[2] == str(n)[-3]:
print('%s * %s = %s, which is a palindrome!' % (a, c, n))
if c == 99:
multi()
print('Done.')
这是迄今为止我为项目 euler #4 编写的代码。在调用函数 multi() 后,我无法让它回到开头。我还是这整件事的新手,所以如果有什么问题,请忘记我。代码似乎工作,只是没有按预期工作。这是输出的最后几行:
999 * 102 = 102897. 999 * 101 = 101898. 999 * 100 = 100899. 999 * 99 = 99900. 998 * 998 = 997002. 完成。
提前谢谢!
【问题讨论】:
-
for循环是否在multi内?还是multi只有那 4 行? -
我会选择不同的设计。嵌套的 for 循环会更有意义。
for a in range(100, 1000): for c in range(100, 1000): n = a * c(但分成多行)。 -
for 循环不在函数 multi() 内,两者的缩进均为 0。这是一个聪明的方法,我现在可以试试看效果如何哈哈。这个问题快把我逼疯了
-
另外,要检查字符串是否是回文,使用另一个循环会更有意义。类似
str_n = str(n); for i in range(len(str_n)): if str_n[i] != str_n[0 - i]: (Not a palindrome)。 -
或者,非常惯用但更复杂的
all(f == l for f, l in zip(str_n, reversed(str_n)))
标签: python-3.x palindrome