Currently, I have written a recursive function to do sum_of_digits but it works for smaller numbers, e.g. Less than 6.
But for larger numbers, the calculation messes up for some reason.
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
What am I doing wrong here?
CodePudding user response:
You need to use //
, the integer division, instead of /
(float division). Using /
loses precision, which leads to the error you encounter.
def sum_of_digits(i):
if i == 0:
return i
return i % 10 sum_of_digits(i // 10)
print(sum_of_digits(228475)) # 28
And it can be done with:
print(sum(map(int, str(228475)))) # 28
CodePudding user response:
You should use "integer division (operator //)" instead of normal division (operator /) in the 5th line.
...
return i % 10 sum_of_digits(i // 10)
...
Integer division return the largest integer smaller than the result of normal division. For example,
5/2 = 2.5 => 5//2 = 2
-5/2 = -2.5 => -5//2 = -3
CodePudding user response:
try to cast your value to int type
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))