题目内容:将一个非负整数,通过不断循环将各个位置上的数字相加,最终为一位数时即为所求结果。比如:
num = 38
3 + 8 = 11
1 + 1 = 2
结果就输出2
int solution1(int n){//调用getSum,判断返回值如果不是一位数继续调用getSum求和
int result = getSum(n);
while(result > 9){
result = getSum(result);
}
return result;
}
int getSum(int n){//求一个数的各位数相加之和
int sum = 0;
while(n > 0){
sum += (n%10);
n = n/10;
}
return sum;
}
解题思路二:以三位数字为例,设num=xyz
num = x * 100 + y * 10 + z = x + y + z + ( x * 99 + y * 9 )
(1)则后面部分一定可被9整除,所以num%9的结果与(x+y+z)%9的结果一样;
(2)因为(x + y) % z = (x % z + y % z) % z,又因为 x % z % z = x % z;
(3)因为最终一位数的结果肯定为0-9,而0-8模9仍是原来的数,9%9=0,显然违背题意
综上所述结果可以写成 (num - 1) % 9 + 1,只模除9一次,并将模除后的结果加一返回即为所求
int solution2(int n){
return (n-1)%9 + 1;
}