python-3.x 如何将一个数的位数相加,直到有一个

arknldoa  于 2023-10-21  发布在  Python
关注(0)|答案(9)|浏览(141)

我想解决这个问题,但我不知道如何
我很感激你的帮助
给定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)
6ovsh4lw

6ovsh4lw1#

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

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

sum_digit(942)
#6
o4tp2gmn

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的数字之和,直到一个数字,没有任何循环/递归。

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

tzcvj98z3#

您可以将当前数字的位数之和传递给递归调用,直到它成为一位数:

def sum_digit(n):
    return sum_digit(sum(map(int, str(n)))) if n > 9 else n

以便:

print(sum_digit(16))
print(sum_digit(942))

产出:

7
6
oxiaedzo

oxiaedzo4#

将值转换为字符串并枚举数字(如其他答案中所建议的)是有效的,但速度较慢。你可以做纯粹的算术如下:

def sum_digit(n: int) -> int:
    while (_n := n) > 9:
        n = 0
        while _n > 0:
            n += _n % 10
            _n //= 10
    return _n
ct2axkht

ct2axkht5#

使用递归函数对一个数字的位数求和,直到只剩下一位。

def sum_digits(n):

   list_of_digits = list(map(int, str(n)))

   digit_sum = sum(list_of_digits)

   # If the sum has more than one digit, call the function recursively

   if digit_sum >= 10:
     return sum_digits(digit_sum)
   else:
     return digit_sum
wqlqzqxt

wqlqzqxt6#

以下是我的解决方案:
确保在keep_adding函数中重新初始化sum = 0,使其忘记先前计算的总和。

digit = 9999999999999999999999999888
def check_length(x):
    if len(str(x))>1:
        return True

def keep_adding(digit):
    sums=0
    for i in str(digit):
        sums+=int(i)
    return sums

while check_length(digit):
    digit=keep_adding(digit)

print(digit)

我尝试了几个不同的digit值,它似乎是预期的工作。

mkshixfv

mkshixfv7#

为了提高效率,可以使用递归。

以下是我使用递归的解决方案:

def sum_of_digits(n):
    # Base case: if n is a single digit, return it
    if n < 10:
        return n
    
    
    digits = [int(digit) for digit in str(n)]
    
    # Calculate the sum of the digits
    total_sum = sum(digits)
    
    
    return sum_of_digits(total_sum)

和输出

print(sum_of_digits(16))  # Output: 7
print(sum_of_digits(942)) # Output: 6
print(sum_of_digits(6784)) # Output: 5
ndasle7k

ndasle7k8#

您可以利用while循环继续求和过程,直到数字减少到一位数

def sum_digits_until_single_digit(num):
    while num >= 10:
        total = 0
        for digit in str(num): 
            total += int(digit)
        num = total
    return num
zaq34kh6

zaq34kh69#

另一种使用Recursion的方法:

def digital_root(n):
    total = 0
    while n > 0:
        digit = n % 10
        total += digit
        n //= 10
    if total > 9:
        return digital_root(total)
    else:
        return total
print(digital_root(942)) # 6

相关问题