把一个整数的每个数位都平方后求和,又得到一个整数,我们称这个整数为:位平方和。
对新得到的整数仍然可以继续这一运算过程。
比如,给定整数为4,则一系列的运算结果为:
16,37,58,89,…
本题的要求是,已知一个整数x,求第n步的运算结果。
数据格式要求:
输入,两个整数x n,中间以空格分开。表示求x的第n步位平方和。
其中,x,n都大于0,且小于100000。
输出,一个整数,表示所求结果。
例如,输入:4 3
则程序应该输出:58
再例如,输入:1314 10
则程序应该输出:20
该方法使用递归处理,具体验证可以看平方怪圈
import java.util.Scanner;
public class Main {
private static int count = 0;// 记录位数
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int n = s.nextInt();// 输入为n的正整数
int m = s.nextInt();// 第m步运算
int S = recursion(n);
for (int i = 1; i < m; i++) {
S = recursion(S);
}
System.out.println(S);
}
public static int get_count(int n) {
int count = 0;
while (n > 0) {
count++;// 多少位数
n /= 10;
}
return count;
}
public static int recursion(int temp) {// 递归
int count = get_count(temp);// 获取当前位数
int x = (int) (temp / Math.pow(10, count - 1));// 对输入的数进行处理取出第一位
int a = (int) Math.pow(x, 2);// 存储被平方后的某位数
temp = (int) (temp % Math.pow(10, count - 1));
if (count > 0) {//如果位数大于0则继续
int b = recursion(temp);
a = a + b;//递归后的每位数相加
}
return a;
}
}