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?
假设num的各位数是a,b,c
则num = a*100 + b*10 + c = a+b+c + a*99+b*9+0
那么num%9 = (a+b+c + a*99+b*9+0)%9 = (a+b+c)%9
所以只要用num对9取模就是可能的结果。如果num%9=0说明a+b+c=9,那么返回9,否则返回num%9
class Solution { public: int addDigits(int num) { if(num==0) return 0; return num%9==0? 9:num%9; } };
原文:http://www.cnblogs.com/zengzy/p/5002313.html