Python实现数字和为9的序列第N项查询及代码超时问题解决
问题分析与解决
你的代码存在两个核心问题:
- 逻辑错误:
sumnum函数未返回数字和,导致外部无法获取计算结果,实际运行时会触发NameError。 - 效率低下:循环时每次加1而非加9,导致需要遍历大量非9倍数的数,直接引发超时。
优化思路
数字和为9的数必然是9的倍数(数论结论:数字和模9等于原数模9),因此我们只需要在9的倍数中寻找数字和恰好为9的数,无需遍历所有自然数。
修正后的代码
def get_digit_sum(n): total = 0 while n > 0: total += n % 10 n = n // 10 return total k = int(input()) num = 9 * k # 直接定位到第k个9的倍数 while get_digit_sum(num) != 9: num += 9 # 每次跳9,只检查9的倍数 print(num)
为什么这样能解决超时
- 跳过了所有非9倍数的数,循环次数大幅减少:比如原代码找第11项时需要从99遍历到108(10次循环),优化后仅需1次循环。
- 对于N=1e6的极端情况,循环次数也仅为几十到几百次,完全符合时间要求。
内容的提问来源于stack exchange,提问作者Codeer
相关产品推荐
相关产品推荐

