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`

. Since`2`

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