求解欧拉计划第4题:两段Python代码为何一正常一异常?
欧拉计划第4题:两段代码差异分析
两段代码的核心区别在于是否对回文数的大小进行判断,这直接导致了结果的不同:
第一段代码的逻辑(正确)
这段代码维护了一个highest变量,初始值为0。每次计算出两个三位数的乘积后,会做两个判断:
- 该乘积是否是回文数
- 该乘积是否大于当前记录的
highest
只有同时满足这两个条件时,才会更新highest的值。这样遍历所有可能的乘积时,highest始终保存着当前找到的最大回文数,最终输出的就是全局最大的结果。
第二段代码的问题(错误)
这段代码没有判断乘积的大小——只要遇到回文数,就直接把product变量覆盖为当前的乘积。
由于循环是按100到999的顺序遍历所有三位数,最后一次被遍历到的回文数必然不是最大的(比如最大的回文数906609会在遍历过程中被更早找到,但后续遍历到的更小回文数会覆盖product的值)。最终输出的只是最后一个被遍历到的回文数,而不是题目要求的最大回文数。
第二段代码的修正方案
只要在更新product时增加“当前乘积是否更大”的判断即可:
product = 0 def PalDetect(number): return str(number) == str(number)[::-1] ThreeDigits = [i for i in range(100, 1000)] for i in ThreeDigits: for j in ThreeDigits: current_product = i * j if PalDetect(current_product) and current_product > product: product = current_product print(product)
内容的提问来源于stack exchange,提问作者Hex
相关产品推荐
相关产品推荐

