只是想为阅读本文时可能遇到的一般编码和逻辑提前道歉。我最近发现了欧拉计划,觉得很有趣。我不仅要找到答案,而且要做一个泛型函数,在给定适当输入的情况下,可以找到任何类似情况的答案。例如,问题4,涉及回文,可以在这里看到:https://projecteuler.net/problem=4
基本上我所做的是找到一种方法,在给定一个数字n的情况下,将所有可能的数字组合相乘,然后找到回文的乘积。然而,任何超过3位的数字都需要太长的时间来处理。我相信这是因为我使用list()函数来利用索引来确定产品是否是回文。有没有别的办法做这种事?我觉得这是把一个正方形推开一个圆孔。你知道吗
下面是有问题的函数。你知道吗
def palindrome(n):
number = 0
for i in range(0,n):
number = number + 9 * pow(10, i)
a = pow(10, n - 1) - 1
b = pow(10, n - 1)
while a * b < number * number:
a = a + 1
b = a
while b <= number:
c = a * b
b = b + 1
digits = list(str(int(c)))
lastdigits = digits[::-1]
numdigits = len(digits)
middle = int((numdigits - (numdigits % 2)) / 2) - 1
if numdigits > 1 and digits[:middle + 1] == lastdigits[:middle + 1] and digits[0] == digits[-1] == '9' and numdigits == 2 * n:
print(c)
三位数可以是100到999之间的任何数字。最大乘积有一点是可以保证的:两个操作数必须尽可能大。你知道吗
因此,通过一个从最大数(999)到最小数(100)的循环是有意义的。我们可以将回文追加到列表中,然后稍后返回最大的回文。你知道吗
在计算乘积时,使用
str(...)
将其转换为字符串。现在,由于python的字符串拼接,检查回文很容易。如果string == string[::-1]
,字符串就是回文,其中string[::-1]
只返回原始字符串的反向副本。你知道吗实施这些战略,我们有:
getBiggestPalindrome()
而且,这是回报
请注意,您可以使用
range
函数来生成从start
到end
的值,使用step
。迭代在end
之前停止,这意味着最后一个值是100。你知道吗相关问题 更多 >
编程相关推荐