给定一个非负整数 num
,反复将各个位上的数字相加,直到结果为一位数。
示例:
输入:
38
输出: 2 解释: 各位相加的过程为:
3 + 8 = 11
,
1 + 1 = 2
。 由于
2
是一位数,所以返回 2。
=================================================================================================
第一次:将0-9与对应的0-9的char类型存到map中,然后将num转成String型,并进行遍历,使用map获取对应的值,然后相加,最后判断相加的和除10是否等于0,等于就返回,不等于就递归。
代码:
public static void main(String[] args) {
int num = 38;
System.out.println(addDigits(num));
}
public static int addDigits(int num) {
int sum = 0;
Map<Character, Integer> map = new HashMap<Character, Integer>();
String s1 = "0123456789";
for(int i = 0;i < 10;i++){
map.put(s1.charAt(i), i);
}
///System.out.println(map);
String s2 = String.valueOf(num);
for(int j = 0;j < s2.length();j++){
sum = sum + map.get(s2.charAt(j));
}
if(sum/10 == 0){
return sum;
}
return addDigits(sum);
}
第二次:找数学规律:各位相加等于 1 + (num - 1)%9
代码:
public static void main(String[] args) {
int num = 38;
System.out.println(addDigits(num));
}
public static int addDigits(int num) {
return 1 + (num - 1)%9;
}