day19//快乐数

什么是快乐数?

对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为  1,那么这个数就是快乐数。如果 n 是快乐数就返回 True ;不是,则返回 False 。

class Solution {

public:

        //定义一个方法用来获取一个数n的每个位数上的平方和

    int getn(int n)

    {

        int sum = 0;

        while(n!=0)

        {

            sum+=(n%10)*(n%10);

            n=n/10;

        }

        return sum;        //返回的sum即为各位数上的平方和

    }

    //定义一个判断是否是快乐数的方法

    bool isHappy(int n) {

            unordered_set<int>set;        //定义集合

            while(1)        //注意:这里是无条件进入循环,因为后面会一直调用上面的getn()函数,直到找到或找不到快乐数为止

        {

            int sum = getn(n);        //先获取到各位数的平方和

            if(sum==1)

            {

                return true;        //若sum为1,则为快乐数

            }

                if(set.find(sum)!=set.end())        //若查找的sum值在之前就出现过,说明sum重复出现,直接return false

                {

                    return false;

                }

                else

                {

                    set.insert(sum);        //否则将该sum放进set集合中,用于接下来的循环判断

                }

                n = sum;        //给n赋值,再次调用getn()函数获取此时的新sum值

         }

    }

};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值