You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用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)

  1. 第一次循环:sum([1,9,8,2]) = 20
  2. 第二次循环:sum([2,0]) = 2,此时n<10,返回结果2,完全符合要求。

两种方法都能解决你的问题,公式法效率更高(O(1)时间复杂度),循环法更直观易懂,看你需求选就行~

内容的提问来源于stack exchange,提问作者Arun Oid

火山引擎 最新活动