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

为何Project Euler第4题代码在不同数值区间运行结果不一致?

Project Euler第4题代码异常原因说明

核心问题

你的代码逻辑存在原生bug,两位数区间运行正确纯属巧合,区间修改后巧合条件消失,就会输出错误结果。

具体原因

  • 首先明确:Project Euler第4题的要求是找到两个同位数乘积的最大回文数,你的代码没有做最大值判断逻辑。
  • 你的代码逻辑是:遍历所有两个数的乘积,只要碰到回文数就直接覆盖变量c、p1、p2的值,最终输出的是遍历顺序中最后一个出现的回文数,而非最大的回文数。
  • 两位数区间的遍历顺序中,最后出现的回文数恰好就是两位数乘积的最大回文数9009,所以碰巧输出正确。
  • 三位数区间的遍历顺序中,最后出现的回文数远小于三位数乘积的最大回文数906609,新的小回文数会覆盖之前存储的大回文数,最终输出结果自然错误。
  • 额外潜在问题:你没有初始化变量c,如果遍历区间内不存在回文数,代码会直接报变量未定义错误。

修复后代码

# 初始化最大回文数为0,存储对应乘数的变量也提前初始化
max_pal = 0
n1 = n2 = 0
# 遍历区间可以优化j从i开始,避免i*j和j*i的重复计算,运行效率提升一倍
for i in range(100, 1000):
    for j in range(i, 1000):
        product = i * j
        product_str = str(product)
        # 同时满足是回文、且比当前存储的最大回文数更大,才更新变量
        if product_str == product_str[::-1] and product > max_pal:
            max_pal = product
            n1 = i
            n2 = j
print(f"{max_pal} is palindrome")

内容的提问来源于stack exchange,提问作者ray_milan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:06:01