Here is the interview question prompt, presented for reference.
We're provided a positive integer num
. Can you write a method to repeatedly add all of its digits until the result has only one digit?
Here's an example: if the input was 49
, we'd go through the following steps:
// start with 49
4 + 9 = 13
// since the previous addition was 13,
// move onto summing 13's digits
1 + 3 = 4
We would then return 4
.
0
and 1000000000
O(log n)
O(1)
You can see the full challenge with visuals at this link.
Challenges • Asked almost 5 years ago by Danaila Marian
This is called the digital room problem or This is called the digital **root* problem?Great job on this site by the way, I am enjoying it! thank you!!
Definitely digital root :-) Glad you're enjoying it!
Hi, guys!
I have a question about "Sum Digits Until One" problem. When I run the code for all the test cases everything is perfect, but when I click 'RUN TESTS' button, it gives me an error:
4
('An error occurred!', NameError("name 'assertEqual' is not defined",))
('An error occurred!', NameError("name 'assertEqual' is not defined",))
('An error occurred!', NameError("name 'assertEqual' is not defined",))
Here is the code:
def sumDigits(n):
if n < 10:
return n
else :
s = 0
while (n > 0):
s += n % 10
n //= 10
return sumDigits(s)
print(sumDigits(49))
Some thoughts about what is wrong?
Same problem here
The assertions in the tests for this are incorrect. For example, I am seeing the following: assert sum_digits(49) == 4
It should be sum_digits(49) == 13
This is incorrect. The question states "write a method to REPEATEDLY add all of its digits until the result has only one digit". You can see in the example that we later add 1 + 3 from 13 to get 4.
I think the example here could be made a bit more clear. It isn't obvious from the problem statement and example that all of the digits in the number needed to be added first to provide the next sum.
One could alternatively interpret the problem statement as fibonnaci-esque - deriving the sum from the first digit and the "reduced" sum of the subsequent digits (which could potentially grow infinitely).
The intent could be easily disambiguated by providing an example with > 2 digits.
> for x = 195
> 1 + 9 + 5 = 15
> 1 + 5 = 6