快乐数

       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;
    }





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值