Add Digits
Given a non-negative integer
num
, repeatedly add all its digits until the result has only one digit.For example:
Given
num = 38
, the process is like:3 + 8 = 11
,1 + 1 = 2
. Since2
has only one digit, return it.Follow up:
Could you do it without any loop/recursion in O(1) runtime?Hint:
- A naive implementation of the above process is trivial. Could you come up with other methods?
- What are all the possible results?
- How do they occur, periodically or randomly?
- You may find this Wikipedia article useful.
Credits:
Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.
There are only 9 possible results. They appear periodically in period of 9.
class Solution { public: int addDigits(int num) { if(num == 0) return 0; num = num % 9; if(num == 0) num = 9; return num; } };
Another trivial, but intuitive approach
class Solution{ int addDigits(int num){ int digit = 0; while(num > 0){ digit += num % 10; digit = digit >= 10? digit - 9: digit; num /= 10; } return digit; } };