平方圈怪
package _07第七届;
- 题目描述
如果把一个正整数的每一位都平方后再求和,得到一个新的正整数。
对新产生的正整数再做同样的处理。
如此一来,你会发现,不管开始取的是什么数字,
最终如果不是落入1,就是落入同一个循环圈。
请写出这个循环圈中最大的那个数字。
请填写该最大数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
结果:145
public class Test03平方圈怪 {
public static void main(String[] args) {
int start=3;
int cnt=0;
int max=0;
while(cnt<1000) { //做一千次循环测试
// System.out.println(start);
int sum=check(start);
start=sum; //继续循环
if(start>max) {
max=start;
}
cnt++;
}
System.out.println(max);
}
private static int check(int start) {
// TODO Auto-generated method stub
String str=start+""; //转换为字符串
int ans=0;
for(int i=0;i<str.length();i++) { //对字符串进行截取 平方
ans+=(str.charAt(i)-'0')*(str.charAt(i)-'0'); //字符转换为数字
}
return ans; //返回平方后相加的和
}
}
方法二
public class Main {
public static void main(String[] args) {
System.out.println(f(1234));
System.out.println(f(12345));
System.out.println(f(123));
System.out.println(f(23456));
// 计算结果都为145
}
public static int f(int num) {
int max = 0;// 通过num计算出的最大值
while (true) {
int temp = 0;// 保存num本次计算的值
while (num != 0) {
temp += (num % 10) * (num % 10);
num = num / 10;
}
num = temp;
if(max == temp ){
break;
}else{
max = (max > temp) ? max : temp;
}
}
return max;
}
}