由于输入的数字1<=n<=10的100次方,所以肯定不能直接用int,或者long类型来存储输入的数字,而是要采取字符串的形式进行存储
由于:
10的一次方:10 (后面1个0)
10的2次方:100 (后面2个0)
10的3次方:1000 (后面3个0)
10的4次方:10000 (后面4个0)
.
10的100次方 :(1后面有100个0)
所以10的100次方一共有101个数
这101个数,把每一位加起来用一个int型整数进行存储绰绰有余,
此时就可以进行树根的计算了。
代码如下:
import java.util.Scanner; /** * @version 1.0 * @Author XuHeng * @Date 2021/5/18 0:10 */ public class Main { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); while (scanner.hasNext()){ String string=scanner.nextLine(); char[] arr=string.toCharArray(); int sum=0; for (int i = 0; i < string.length() ; i++) { sum+=(arr[i]-'0');//计算字符串的各位之和 } System.out.println(numRoot(sum)); } } private static int numRoot(int n){ int sum=0; while (n>0){//判断n是否是一个 一位数 //若n不是一位数,则计算它的各位之和 int n1=n%10; sum+=n1; n/=10; } if (sum/10>0){//判断各位之和是否是一个 个位数 //若不是,继续求它的树根 return numRoot(sum); } //否则结束计算 return sum; } }