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.
这道题是把数字的每一位都相加直到相加之后为1位数,返回那个数字。
1.可以用一行代码解出这个题:
return (num-1)%9+1;
因为若num = a*1000+b*100+c*10+d, 则可以写为:num = a+b+c+d+(a*999+b*99+c*9) 括号里的部分一定能被9整除,所以对num%9相当于(a+b+c+d)%9,这个时候,大部分的数字都可以用这种方法得到结果,但是如果num是9的倍数或者num%9是9的倍数,得到的会是0,但我们希望得到的结果是9,所以这时候让num-1%9,再加上1 即可。
2.另一种方法,比较直观:
int res=num;
while(true){
if(res<10){
return res;
}
num = res;
res = 0;
while(num!=0){
res= res+num%10;
num = num/10;
}
}
先把num的值赋给res,然后判断res是否小于10,如果小于10,则返回res即num本身,否则的话就把res再赋给num,res为0,然后取num的每一位数字,相加为res,再在while循环中判断res的值。