我的问题是循环遍历一个长数字,以便找到该数字中 5 个连续数字的最大乘积。我有一个解决方案,但它目前涉及元素位置的硬编码,感觉/看起来很丑陋并且不可扩展(如果我想要 10 个连续项的总和怎么办?)。有没有一种方法可以将此解决方案“Python”起来并以某种方式嵌套或优化它?
n = 82166370484403199890008895243450658541227588666881
N = str(n)
Pro = 0
for i in range(0, len(N) - 4):
TemPro= int(N[i])*int(N[i+1])*int(N[i+2])*int(N[i+3])*int(N[i+4])
if TemPro> Pro :
Pro = TemPro
print(Pro )
操作系统:Windows 7
语言:Python 3
最佳答案
在 N
的切片上使用 reduce
的完美案例:
from functools import reduce # python 3
nb_terms = 5
for i in range(0, len(N) - nb_terms - 1):
TemPro= reduce(lambda x,y:int(x)*int(y),N[i:i+nb_terms])
if TemPro> Pro :
Pro = TemPro
print(Pro)
reduce
会将所有项相乘,没有可见的循环,也没有对项的数量进行硬编码。
关于python - 如何在不对元素位置进行硬编码的情况下嵌套循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47622471/