You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Project Euler第8题:13位连续数字最大乘积代码错误排查求助

Project Euler 第8题代码问题排查

问题点分析

  1. 循环范围错误
    遍历起始索引的范围计算有误,导致遗漏部分连续13位数字的组合。原代码中range(len(collapse) - size - 1)会提前终止循环,正确的范围应该是range(len(collapse) - size + 1)——当起始索引为len(collapse)-size时,刚好能取到最后13个元素,循环需覆盖到这个索引。

  2. 内层循环逻辑错误
    计算乘积的代码被放在填充window的内层循环中,导致每填充一个元素就计算一次乘积。而只有当window被完全填满13个元素时的乘积才是有效的,之前的计算会因为窗口未填满(包含初始0值)产生无效结果,干扰最大乘积的判断。

  3. 冗余的numpy数组使用
    用numpy数组存储窗口完全没必要,直接使用Python列表切片即可完成操作,还能避免额外的类型转换开销。


修正后的代码

from functools import reduce

# 读取文件并拼接成完整的数字字符串
with open('Euler_8.txt') as file:
    digits = file.read().replace('\n', '')

# 转换为整数列表
digit_list = [int(c) for c in digits]
window_size = 13
max_product = 0

# 遍历所有可能的连续13位数字窗口
for i in range(len(digit_list) - window_size + 1):
    current_window = digit_list[i:i+window_size]
    product = reduce(lambda x, y: x * y, current_window)
    if product > max_product:
        max_product = product

print(max_product)

修正说明

  • 简化文件读取:直接读取所有内容并移除换行符,一步得到完整的1000位数字字符串,无需分步处理每行再拼接。
  • 修正循环范围:确保所有连续13位数字的组合都被遍历到。
  • 移除无效逻辑:通过列表切片直接获取完整窗口,填充完成后再计算乘积,避免无效计算。
  • 代码更简洁易读,减少了不必要的中间变量和类型转换。

内容的提问来源于stack exchange,提问作者Daniel T. McGuiness

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 03:01:11