如何用带range的嵌套for循环优化欧拉计划第8题的乘积计算代码
欧拉计划第8题:13位相邻数字最大乘积优化实现
核心问题修正
你之前初始化product_13 = 0是关键错误——乘法中任何数与0相乘结果都是0,所以不管后续计算多少数字,乘积都会保持0。正确的初始化值应该是1,因为1是乘法的单位元,不会改变乘积的初始状态。
嵌套循环实现方案
用嵌套range循环遍历所有可能的13位数字组合,代码结构清晰、可读性强,具体实现如下:
# 替换为你的1000位数字字符串 digit_str = "73167176531330624919225119674426574742355349194934..." max_product = 0 # 外层循环:遍历所有13位数字的起始索引(最后一个起始位需留够13个数字) for start in range(len(digit_str) - 12): current_product = 1 # 初始化乘积为1,而非0 # 内层循环:计算当前起始位开始的13个数字乘积 for i in range(start, start + 13): digit = int(digit_str[i]) current_product *= digit # 更新最大乘积 if current_product > max_product: max_product = current_product print("最大乘积结果:", max_product)
效率优化(可选)
如果数字字符串中包含0,可以在计算过程中提前终止内层循环,避免无效计算:
max_product = 0 for start in range(len(digit_str) - 12): current_product = 1 for i in range(start, start + 13): digit = int(digit_str[i]) if digit == 0: current_product = 0 break # 遇到0直接停止当前组计算,节省时间 current_product *= digit if current_product > max_product: max_product = current_product
优势说明
相比手动逐个索引的写法,这种方案:
- 代码结构模块化,逻辑一目了然
- 若后续需要调整相邻数字的个数(比如改成5位),只需修改
start + 13和len(digit_str)-12中的数字即可,维护成本极低
内容的提问来源于stack exchange,提问作者Just doing my best
相关产品推荐
相关产品推荐

