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. Since2has 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;
}
};