题目
标题:平方怪圈
如果把一个正整数的每一位都平方后再求和,得到一个新的正整数。
对新产生的正整数再做同样的处理。
如此一来,你会发现,不管开始取的是什么数字,
最终如果不是落入1,就是落入同一个循环圈。
请写出这个循环圈中最大的那个数字。
请填写该最大数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
解题思路
1、寻找循环终止条件,如果不是落入1,就是落入同一个循环圈。
前半句很好理解,后面半句则可以这样理解,如果最大的那个数字出现了两次则表示落入了循环圈。(这中判断方式是简化的判断,并不严谨,符合大多数情况。可有些数字如99,79.并不能计算出正确的结果,可以加上输出语句判断最大数字是否存在循环圈中)
2、有了终止条件代码就很容易下手了,每次把一个正整数n的每一位都平方后再求和,得到一个新的正整数。再将新正整数赋给n,重新进入循环,直到落入循环圈,或落入1.代码如下:附带详细注释
答案:145
//java代码
public static int squareCircle(int n) {
int max = 0;//保存最大值
while (n != 1) {//循环条件
int t = n;
int sum=0;//保存新的正整数。
//计算得出新的正整数
while (t != 0) {
int x = t % 10;
sum=sum+x*x;
t = t / 10;
}
n=sum;//将新正整数的值赋予n,更新n的值
if(max==sum){
//如果max的值出现了两次则表示落入同一个循环圈。跳出循环
break;
}
//使max保持最大
max=Math.max(sum,max);
}
System.out.print(max);
//返回结果
return max;
}