为何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
相关产品推荐
相关产品推荐

