各位相加
给定一个非负整数 num
,反复将各个位上的数字相加,直到结果为一位数。返回这个结果。
输入: num = 38
输出: 2
解释: 各位相加的过程为: 38 --> 3 + 8 --> 11 11 --> 1 + 1 --> 2 由于 2
是一位数,所以返回 2。
算法分析
简单来看,就是利用循环,把数的每一位求出来相加。
我的思路
int addDigits(int num) {
while(true){
int n=num/10+num%10;
if(n/10==0)//个数
return n;
num=n;
}
}
官方题解
int addDigits(int num){
while (num >= 10) {
int sum = 0;
while (num > 0) {
sum += num % 10;
num /= 10;
}
num = sum;
}
return num;
}
总结
1.我只计算了两位数的情况,考虑不全面。关键在于:先对这个数%10,然后再/10,先取余再整除。这样就可以包含所有位数的情况。
2.把每一次计算出各个位数和的结果,放在内层循环里面,在外层循环中计算新一次的数。