平方怪圈
如果把一个正整数的每一位都平方后再求和,得到一个新的正整数。
对新产生的正整数再做同样的处理。
如此一来,你会发现,不管开始取的是什么数字,
最终如果不是落入1,就是落入同一个循环圈。
请写出这个循环圈中最大的那个数字。
请填写该最大数字。
分析:
假设一个数字进行测试,如123
int x = 123;
1*1=1
2*2=4
3*3=9
14
1*1=1
4*4=16
17
1*1=1
7*7=49
50
5*5=25
0*0=0
25
...
...
...
通过规律把每一次的数字进行比较,落入1停止
public class Main {
public static void main(String[] args) {
/*根据题意得无论所有数都会进入一个循环圈或者1。
* 所以我测试数据取多少无所谓
* 既然最终都会进入圈内,求最大值我用判断语句1肯定不挂边,
* 那么圈中的最大值也就是测试语句变化的所有值中最大的
*
* 当然 靠打印语句也可以看出来圈中最大值
*
* */
int max = 0;
for (int i = 20; i < 50; i++) {//测试20-50的数据
int ii = i;//赋值给ii ii用来变化数值
int is = 0;//声明一个圈中循环的次数
while(ii!=1 && is<100){//ii变为1 或者循环100次停止循环
is++;//循环次数累加
if(ii<100){//二位数操作
int ge = ii%10;
int shi = ii/10;
ge = ge*ge;
shi = shi*shi;
ii=shi+ge;
if(max<ii){
max=ii;
}
//System.out.print(ii+" ");//打印变化后的
}else{//三位数操作:
int ge = ii%10;
int shi = ii/10%10;
int bai = ii/100;
ge = ge*ge;
shi = shi*shi;
bai = bai*bai;
ii=shi+ge+bai;
if(max<ii){
max=ii;
}
//System.out.print(ii+" ");
}
}
//System.out.println();
}
System.out.println("最大值为:"+max);
}
}
打印输出为:
最大值为:145