我想解决这个问题,但我不知道如何
我很感激你的帮助
给定n,取n的数字之和,如果该值有多个数字,则继续,直到只有一个数字
预期输出:
16 -> 1 + 6 = 7
942 -> 9 + 4 + 2 = 15 -> 1 + 5 = 6
我试过这个,但我不知道如何重复,直到只有一个数字
Def sum_digit(n):
list_of_digits = list(map(int,str(n)))
su = []
for x in list_of_digits:
x = sum(list_of_digits)
su = x
print(su)
sum_digit(6784)
9条答案
按热度按时间6ovsh4lw1#
您可以使用
while
循环重复,直到数字减少到个位数。o4tp2gmn2#
从result开始,每个整数都与它的数字之和模9全等。
证明很简单:
n ≡ sum_{k=0}^{m} 10^k d_k (mod 9) ≡ sum_{k=0}^{m} (9+1)^k d_k (mod 9) ≡ sum_{k=0}^{m} d_k (mod 9)
,当m
=n
-1
中的位数时因此,简单地计算
n % 9
来找到n
的数字之和,直到一个数字,没有任何循环/递归。tzcvj98z3#
您可以将当前数字的位数之和传递给递归调用,直到它成为一位数:
以便:
产出:
oxiaedzo4#
将值转换为字符串并枚举数字(如其他答案中所建议的)是有效的,但速度较慢。你可以做纯粹的算术如下:
ct2axkht5#
使用递归函数对一个数字的位数求和,直到只剩下一位。
wqlqzqxt6#
以下是我的解决方案:
确保在
keep_adding
函数中重新初始化sum = 0
,使其忘记先前计算的总和。我尝试了几个不同的
digit
值,它似乎是预期的工作。mkshixfv7#
为了提高效率,可以使用递归。
以下是我使用递归的解决方案:
和输出
ndasle7k8#
您可以利用while循环继续求和过程,直到数字减少到一位数
zaq34kh69#
另一种使用Recursion的方法: