要求:
给定任意一个非负数,要求将每一位相加,得到结果后如果不是一位数则继续相加直至结果是一位数,输出结果。比如38,3+8=11,1+1=2,最后输出2。
通常做法是,先知道给定数的位数,然后循环相加得到新的数,判断新的数是不是一位数,不是的话重复整个过程,循环出口就是当它是一位数的时候。下面的代码就是这个思路的。
Code: public int addDigits(int num) { return num; 但是还可以继续思考一下,有没有一种方法不用任何循环呢,直接就可以输出结果呢?
public class Solution {
public int getDigits(int num) {
int digits;
for (digits = 1;num >= 10;digits++) {
num = num / 10;
}
return digits;
}</p>
while (num >= 10) {
int newNum = 0;
for (int n = getDigits(num);n >= 1;n--) {
newNum = num % 10 + newNum;
num = num / 10;
}
num = newNum;
}
}
}
</code>