各位相加
给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。
示例:
输入: 38
输出: 2
解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。 由于 2 是一位数,所以返回 2。
进阶: 你可以不使用循环或者递归,且在 O(1) 时间复杂度内解决这个问题吗?
解法一:模九法
- 100x+10y+z=99x+9y+x+y+z(此规律不适用于9的倍数)
- 9的倍数相加都等于9(因为我们的数学是十进制的。给9一个1会变成另外一个1(进一位),这样就会造成9的倍数各个数相加和不变的现象。36=9+27,27给9一个1变成26,9加了一个1变成十位上的1,依次27=9+18,18=9+9类推得证)
class Solution {
public int addDigits(int num) {
if(num<10) {
return num;
//9的各位和为9
}else if(num%9==0){
return 9;
}else{
return num%9;
}
}
}
解法二:循环法
class Solution {
public int addDigits(int num) {
while(num>=10){
num=num/10+num%10;
}
return num;
}
}