[英]How do I do sum_of_digits recursively for large numbers
目前,我已經編寫了一個遞歸的 function 來執行 sum_of_digits 但它適用於較小的數字,例如小於 6。
但是對於更大的數字,由於某種原因計算會出錯。
def sum_of_digits(i):
if i == 0 :
return i
else:
return i % 10 + sum_of_digits(i / 10)
sum_of_digits(228475)
# returns 31.111111111111107
# should be returning 28 instead
我在這里做錯了什么?
您需要使用//
,即 integer 除法,而不是/
(浮點除法)。 使用/
會失去精度,從而導致您遇到錯誤。
def sum_of_digits(i):
if i == 0:
return i
return i % 10 + sum_of_digits(i // 10)
print(sum_of_digits(228475)) # 28
它可以通過以下方式完成:
print(sum(map(int, str(228475)))) # 28
您應該在第 5 行使用“整數除法(運算符//)”而不是普通除法(運算符/)。
...
return i % 10 + sum_of_digits(i // 10)
...
Integer除法返回不大於正常除法結果的最大integer。 例如,
5/2 = 2.5 => 5//2 = 2
-5/2 = -2.5 => -5//2 = -3
6/3 = 2.0 => 6//3 = 2
有很多解決方案,但如果您對除法和取模 (%) 不滿意,可以使用此方法。 只需將數字作為字符串傳遞給 function。
def sum_of_digits(num, ind=0):
if ind == len(num):
return 0
return int(num[ind]) + sum_of_digits(num,ind+1)
sum_of_digits(str(228475))
#RESULT = 28
嘗試將您的值轉換為int
類型:
def sum_of_digits(i):
if i == 0 :
return i
else:
return i % 10 + sum_of_digits(int(i / 10))
print(sum_of_digits(228475))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.