问题描述: 现给出一个三位数,先对这个三位数的各似数子的以力求和,然后再对求出的和中的各位数字的立方求和,如此一直继续下去,判断最后能否得到一个不再变化的固定值。 如能得到一个固定值,就求出这个固定值:如果不能,则输出呢示信息“error”。另外请注意,在求解过程中,若某次求和过程中得到的值超过三位数,则取该数的低三位 继续往下运算…… 例如,对于三位数111,则第一次计算应是1×1×1+1X1×1+1X1×1=3,第二次计算应是0×0×0+0×0×0+3×3×3=27,第三次计算应是0x0×0+2×2X2+7×7X 7=351, 第四次计算应是3X3×3+5×5×5+1X1×1=153,第五次让算应是1×1×1+5×5×5+3×3×3=153,与第四次计算的结果相同,这时可不再计算,输出固定值153。 亲爱的同学,请你也来计算一下
输入格式:
只有一行,是一个三位数
输出格式:
也只有一行,如能得到固定值则输出这个固定值,如不能则输入错误提示信息“error”
输入样例:
111
输出样例:
153
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
int a = sc.nextInt();
List<Integer> list = new ArrayList<>();
list.add(a);
while(true){
// 判断是否成为一个固定值
if(a == lifanghe(a)) {
System.out.println(a);
break;
}
else{
a = lifanghe(a);
// 判断之前是否重复出现过
if(list.contains(a)) {
System.out.println("error");
break;
}
list.add(a);
}
}
}
// 取后三位数进行立方和
public static int lifanghe(int x){
int c = x%10;
int b = x/10%10;
int a = x/100%10;
return (a*a*a+b*b*b+c*c*c);
}
}