给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。
1. 暴力循环法
int addDigits(int num) {
while(num>9)
{
int sum =0;
while(num>=1)
{
sum += num%10;
num = num/10;
}
num = sum;
}
return num;
}
2. 假设一个三位数整数n=100*a+10*b+c,变化后addn=a+b+c;两者的差值为n-addn=99a+9b,差值可以被9整除,说明每次缩小9的倍数;那么我们可以对res=num%9,若不为0则返回res,为0则返回9但是要注意当 num == 0 时会输出 0
int addDigits(int num) {
if(!num) return 0;
if(num % 9 == 0) return 9;
return num % 9;
}
3. 递归法,即 n=a* 100+b* 10+c,求f(n)=a+b+c,如f(n)<10 return f(n),否则return f(f(n));
int addDigits(int num) {
if(n<10) return n;
else return f(n%10+f(n/10));
}