3.平方怪圈

声明

可能本文章会有错误,希望各位读者看到后,记得回复留言,提醒我,以免误人子弟。本人菜鸡,还望各位大佬手下留情。

题目

如果把一个正整数的每一位都平方后再求和,得到一个新的正整数。
对新产生的正整数再做同样的处理。

如此一来,你会发现,不管开始取的是什么数字,
最终如果不是落入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);
	}
}
posted @ 2018-04-04 22:30  popring  阅读(316)  评论(0编辑  收藏  举报