链接:https://www.nowcoder.com/questionTerminal/e2422543519249f292d8435394ab82fe
来源:牛客网
数根可以通过把一个数的各个位上的数字加起来得到。如果得到的数是一位数,那么这个数就是数根;如果结果是两位数或者包括更多位的数字,那么再把这些数字加起来。如此进行下去,直到得到是一位数为止。
比如,对于24 来说,把2 和4 相加得到6,由于6 是一位数,因此6 是24 的数根。
再比如39,把3 和9 加起来得到12,由于12 不是一位数,因此还得把1 和2 加起来,最后得到3,这是一个一位数,因此3 是39 的数根。
现在给你一个正整数,输出它的数根。
输入描述:
输入包含多组数据。
每组数据数据包含一个正整数n(1≤n≤10E1000)。
输出描述:
对应每一组数据,输出该正整数的数根。
示例1
输入
24
39
输出
6
3
解题思路:这道题的思路很简单,就是每次将数字的所有位加起来然后判断是不是数根,若是则打印出来,若不是则继续调用函数进行计算。需要注意的是n的最大取值远超过了int的范围,因此选择字符串类型较好。
package TE0517;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
while (scanner.hasNext()){
String str=scanner.nextLine();
int num=0;
//第一次进行数根判定
for (int i=0;i<str.length();i++){
num+=str.charAt(i)-'0';
}
//若当前所有位的数字只和小于10则该数就是数根
if (num<10){
System.out.println(num);
}else {
System.out.println(s1(num));
}
}
}
//由于已经进行了一次所有位数字加和因此传入的参数不会超过int的范围
private static int s1(int num){
int result=0;
while (true){
//加上num的最低位数字
result+=num%10;
//将num除10
num/=10;
//加上num的最高位
if (num<10){
result+=num;
break;
}
}
//若result小于10则result就是数根反之则继续调用该函数
if (result<10){
return result;
}else{
return s1(result);
}
}
}