1,题目大意
有一个非负整数num,重复这样的操作:对该数字的各位数字求和,对这个和的各位数字再求和……直到最后得到一个仅1位的数字(即小于10的数字)。
例如:num=38,3+8=11,1+1=2。因为2小于10,因此返回2。
2,分析
(1)通过循环求各个数的和:
num%10:得到是个位数
num/10 :得到的是个位以上的数
(2)用数组循环:
num可转换为一个字符数组nums,nums[i]-‘0’是这个数
(3)数根公式:
or
解释看维基百科:
数根公式-维基百科
3,代码
(1)数学循环:
public static int addDigits(int num) {
while(true) {
if (num < 10) {
return num;
}
int sum = 0;
while(num != 0) {
sum += num % 10;
num = num/10;
}
num = sum;
}
}
(2)数组循环:
public static int addDigits(int num) {
while(num >=10){
String s = String.valueOf(num);
char[] nums = s.toCharArray();
int sum = 0;
for (int i = 0; i < nums.length; i++) {
sum += nums[i]-'0';
}
num = sum;
}
return num;
}
(3)数根公式:
public static int addDigits(int num) {
return (num-1)%9 +1;
}
public static int addDigits1(int num) {
int a = num % 9;
return a == 0?9:a;
}