如何将一个数的数字相加直到有1

Ari*_*ito 4 python sum function digits python-3.x

我想解决这个问题,但我不知道如何解决

\n

我\xc2\xb4d 感谢你的帮助

\n

给定n,如果该值有多于一位数字,则取n的数字之和,继续直到\xc2\xb4s只有一位

\n

预期输出:

\n
16 -> 1 + 6 = 7\n942 -> 9 + 4 + 2 = 15 -> 1 + 5 = 6\n
Run Code Online (Sandbox Code Playgroud)\n

我尝试了这个,但我不\xc2\xb4t 知道如何重复它,直到只有一位数字

\n
Def sum_digit(n):\n list_of_digits = list(map(int,str(n)))\n\nsu = []\nfor x in list_of_digits:\nx = sum(list_of_digits)\nsu = x\n\nprint(su)\n\nsum_digit(6784)\n
Run Code Online (Sandbox Code Playgroud)\n

Pal*_*ine 6

您可以使用while循环重复,直到数字减少到一位数。

def sum_digit(n):
    while n > 9:
        n = sum(int(i) for i in str(n))
    return n
Run Code Online (Sandbox Code Playgroud)
sum_digit(16)
#7

sum_digit(942)
#6
Run Code Online (Sandbox Code Playgroud)


San*_*Dey 6

从这个结果来看,每个整数都与其数字之和 mod 9 全等。

\n

证明很简单:

\n

n \xe2\x89\xa1 sum_{k=0}^{m} 10^k d_k (mod 9) \xe2\x89\xa1 sum_{k=0}^{m} (9+1)^k d_k (mod 9) \xe2\x89\xa1 sum_{k=0}^{m} d_k (mod 9), 当m= 中的位数n-1

\n

因此,只需计算n % 9即可找到直到一位数字的数字之和n,无需任何循环/递归。

\n
def sum_digits(n): # assumes n > 0, otherwise n = 0 is trivial\n    # assert(n > 0)\n    return (n-1) % 9 + 1                # 1. this will work\n    # return n % 9 if n % 9 else 9      # 2. this will also work\n
Run Code Online (Sandbox Code Playgroud)\n