2016-09-17 73 views
2

提示:編寫一個程序,添加一個整數中的所有數字。如果得到的總和超過一位數字,請繼續重複,直到總和爲一位數字。例如,數字2345的總和爲2+3+4+5 = 14,這不是一個數字,所以用1+4 = 5這個單個數字重複。如何使循環重複,直到總和爲單個數字?

這是我到目前爲止的代碼。它適用於第一部分,但我不知道如何重複它,直到總和爲單個數字。我敢肯定,我應該巢代碼中,我已經有另一個while聲明

n = int(input("Input an integer:")) 
sum_int=0 
while float(n)/10 >= .1: 
    r= n%10 
    sum_int += r 
    n= n//10 
    if float(n)/10 > .1: print(r, end= " + ") 
    else: print(r,"=",sum_int) 

這是代碼

輸入一個整數的樣本輸出:98765678912398

8 + 9 + 3 + 2 + 1 + 9 + 8 + 7 + 6 + 5 + 6 + 7 + 8 + 9 = 88

8 + 8 = 16

1 + 6 = 7

+1

好像一個使用遞歸的絕佳機會。 –

+0

使用if語句和'len()' – heather

+2

爲什麼你的程序要做所有這些算術?將數字轉換爲字符串,然後將每個字符轉換爲數字。 – TigerhawkT3

回答

1

你不需要在這裏將你的整數轉換爲浮點數;只需使用divmod() function在一個循環:

def sum_digits(n): 
    newnum = 0 
    while n: 
     n, digit = divmod(n, 10) 
     newnum += digit 
    return newnum 

通過使您可以更輕鬆地使用它的功能重複這適用於數量,直到它小於10:

n = int(input("Input an integer:")) 
while n > 9: 
    n = sum_digits(n) 

print(n) 
1

你可以利用遞歸。

試試這個:

def sum_of_digits(n): 
    s = 0 

    while n: 
     s += n % 10 
     n //= 10 

    if s > 9: 
     return sum_of_digits(s) 

    return s 

n = int(input("Enter an integer: ")) 
print(sum_of_digits(n)) 
+4

*「您需要」 *太強了:迭代解決方案也是可能的,因爲這是一個尾遞歸的情況,所以沒有遞歸是非常簡單的。 – trincot

+0

你是對的,我相應地調整了文字 –

3

這應該工作,沒有參與分工。

n = int(input("Input an integer:")) 
while n > 9: 
    n = sum(map(int, str(n))) 
print(n) 

它基本上整數轉換爲字符串,然後總結了使用列表理解的數字,並一直持續到數不超過9

+0

你並不需要發送一個列表到'sum' - 如果你刪除括號,它將是一個生成器。或者,因爲你映射的函數是內置的,所以你可以使用'n = sum(map(int,str(n)))'。 – TigerhawkT3

0

我不知道這是否是抗實踐在Python中,因爲我對語言一無所知,但這裏是我的解決方案。

n = int(input("Input an integer:")) 

def sum_int(num): 
    numArr = map(int,str(num)) 
    number = sum(numArr) 
    if number < 10: 
     print(number) 
    else: 
     sum_int(number) 

sum_int(n) 

再次我不確定Python中的函數中的遞歸,但嘿,它的工作原理:)

0

如果你喜歡遞歸,你必須:

>>> def sum_digits_rec(integ): 
     if integ <= 9: 
      return integ 
     res = sum(divmod(integ, 10)) 
     return sum_digits(res) 

>>> print(sum_digits_rec(98765678912398)) 
7