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.
思路是:假设一个数是abcde,则abcde=a*10000+b*1000+c*100+d*10+e=(a+b+c+d+e)+(a*9999+b*999+c*99+d*9),已知后面括号里的数一定是能够被9整除的,所以abcde和a+b+c+d+e模9所得的余数相同。因为a+b+c+d+e结果依然可能不是只有一位数,所以循环下去,可是这个规律依然存在。但有个例外就是当数为9时,取模后为0,但其实是9的,只要将数先减小1,最后结果再增加1即可class Solution { public: int addDigits(int num) { return 1+(num-1)%9; } };