题解 | 快乐数
快乐数
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是快乐数就会退出循环,此时返回真值
}
};