列表循环求和至结果为个位数的Python代码优化求助
优化循环求数字根的Python代码
你要实现的功能其实是求数字根——也就是把一个数的所有位数字反复相加,直到得到单个数字。原代码的循环求和方式在输入超长时效率低,用数学公式可以直接一步出结果,完全不会超时。
数字根的数学规则
- 如果输入的数是0,结果就是0
- 否则,结果等于
总和 % 9;如果余数是0且原数(或总和)不为0,结果就是9
优化后的代码
方式一:直接处理输入字符串(适合超长大数,避免转整数的开销)
s = input().strip() # 先计算所有数字的总和 total = sum(int(c) for c in s) if total == 0: print(0) else: res = total % 9 print(res if res != 0 else 9)
方式二:转成大整数计算(Python支持任意长度整数)
num = int(input().strip()) if num == 0: print(0) else: res = num % 9 print(res if res != 0 else 9)
为什么更高效?
不管输入多长,只需要一次遍历求和(或直接取模),没有循环迭代的过程,时间复杂度是O(n)(n为输入字符长度),比原代码的循环方式快几个量级,完全不会出现超时问题。
举个例子:输入"12345",总和是15,15%9=6,和预期结果一致;输入"999",总和27,27%9=0,所以输出9,符合规则。
内容的提问来源于stack exchange,提问作者TJ_Guide
相关产品推荐
相关产品推荐

