如何用Python实现数字迭代求和?以出生年份1982为例
实现数字迭代求和(数字根)的简洁Python方案
嘿,我明白你要做的是把一个数的各位反复相加,直到得到个位数对吧?这个其实就是数学里的数字根(Digital Root),有两种超简洁的实现方式,我给你拆解一下:
方法一:数学公式法(最高效)
数字根有个现成的数学规律,能直接算出结果,不用循环迭代:
- 如果输入是0,结果就是0
- 如果输入能被9整除,结果是9
- 其他情况,结果就是输入对9取余的结果
对应的Python代码超短:
def digital_root(n): if n == 0: return 0 return 9 if n % 9 == 0 else n % 9
测试一下你的例子:digital_root(1982),1982除以9余2,直接返回2,完美符合你的需求!
方法二:循环迭代法(更直观)
如果你想看到每一步的求和过程,用循环拆解各位相加也很简单:
def digital_root_iterative(n): # 当数字大于等于10时,继续迭代求和 while n >= 10: # 把数字转成字符串,逐个字符转成整数后求和 n = sum(int(digit) for digit in str(n)) return n
测试digital_root_iterative(1982):
- 第一次循环:
sum([1,9,8,2]) = 20 - 第二次循环:
sum([2,0]) = 2,此时n<10,返回结果2,完全符合要求。
两种方法都能解决你的问题,公式法效率更高(O(1)时间复杂度),循环法更直观易懂,看你需求选就行~
内容的提问来源于stack exchange,提问作者Arun Oid




