声明
可能本文章会有错误,希望各位读者看到后,记得回复留言,提醒我,以免误人子弟。本人菜鸡,还望各位大佬手下留情。
题目:
如果把一个正整数的每一位都平方后再求和,得到一个新的正整数。
对新产生的正整数再做同样的处理。
如此一来,你会发现,不管开始取的是什么数字,
最终如果不是落入1,就是落入同一个循环圈。
请写出这个循环圈中最大的那个数字。
请填写该最大数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
分析:
略,这里由于本人对集合类不是特别熟悉,只能是想起来哪个用哪个,相对数组来说比较方便些,如果对集合类不是特别熟悉的话,可以用数组代替,比赛的时候当然是以最快的方式求出答案为好,但是学习的时候博主还是认为应该多学习怎么写是最优的。
博主这里用HashSet是因其去重的特性,比较方便些。
代码
import java.util.ArrayList;
import java.util.HashSet;
public class c {
public static void main(String[] args) {
int a = 1234; //初始数字
int b; //每次取出的数字
int count = 0; //每次的平方和
int num = 100; //运算次数
ArrayList<Integer> list = new ArrayList<Integer>(); //将b放入此list
HashSet<Integer> set = new HashSet<Integer>(); //将count放入此set
//运算次数
for(int i=0;i<num;i++) {
//取出的每一个位数的数字放入list
while(a>0) {
b = a % 10;
list.add(b);
a = a / 10;
}
a = 0;
//运算每次的平方和,并添加至set
for(int c : list) {
a = a + c*c;
}
list.clear();
set.add(a);
}
System.out.println(set);
}
}