for details: 快乐数定义
快乐数有以下的特性:在给定的进位制下,该数字所有数位(digits)的平方和,得到的新数再次求所有数位的平方和,如此重复进行,最终结果必为1。
例如,以十进制为例:
2 8 → 22+82=68 → 62+82=100 → 12+02+02=1
3 2 → 32+22=13 → 12+32=10 → 12+02=1
3 7 → 32+72=58 → 52+82=89 → 82+92=145 → 12+42+52=42 → 42+22=20 → 22+02=4 → 42=16 → 12+62=37……
因此28和32是快乐数,而在37的计算过程中,37重复出现,继续计算的结果只会是上述数字的循环,不会出现1,因此37不是快乐数。
public boolean isHappy(int n) {
Set<Integer> loop=new HashSet<Integer>();//用HashSet的原因:HashSet比较两个元素是否相同要先比较hashcode()和equals(),当这两个都一样是,则判断相等,所以第一个循环中,如果在循环中,利用hashset可以避免无休止的循环
int retain,sum;
while(loop.add(n))
{
sum=0;
while(n>0)
{
retain=n%10;
sum+=retain* retain;
n/=10;
}
if(sum==1)
{
return true;
}
else
n=sum;
}
return false;
}