题解 | 快乐数

快乐数

https://www.nowcoder.com/practice/293b9ddd48444fa493dd17da0feb192d

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param n int整型 
     * @return bool布尔型
     */
    bool happynum(int n) {
        // write code here
	  //本题解思路来自牛客er@_Donk_,以下仅谈自己的理解,如有侵权请联系删除
        multiset<int> a;//首先定义一个多组集合,因为可能有相同数字
	  //然后为什么是集合呢?因为我们需要用到集合的查找功能
        while(n!=1)//只要n!=1,即n不是快乐数,就继续循环
        {
            if(a.count(n))//但是一个数很难一直进行某种运算,到后面会有重复的阶段
			  //我们将n的各个值记录到集合中,每次循环前进行查找,如果有相同的值,说明
			  //n不是快乐数
            {
                return false;//此时我们返回假值
            }
            a.insert(n);//如果没发现集合中有n,则将现有的n插入集合
            int i{},sum{};//定义两个变量用来计算n的平方和
            int temp=n;//定义一个临时变量用来存储n
            while(temp!=0)//我们对临时变量进行操作,计算它每一位的平方然后求和
            {
                i=temp%10;
                sum+=i*i;
                temp/=10;//以上为求和
            }
            n=sum;//令n等于求和值,在下一轮循环时验证是否出现过
            

        }
        return true;//上述循环只要一直运行,如果n是快乐数就会退出循环,此时返回真值

    }
};

全部评论

相关推荐

10-29 19:42
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务