题目描述:
编写一个算法来判断一个数是不是“快乐数”。
一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。
示例:
输入: 19
输出: true
解释:
+ = 82
+= 68
+ = 100
+ + = 1
题目分析
主要思路是循环计算每一位的平方和相加,在有限次的循环下,看是否得出1来,主要问题是如何讲一个多位数分成1位一位的,很简单的方法是对10的n次方取余,然后取出每一位数的值,但是这样比较麻烦,所以主要的方法是将多位数转化为字符,然后在取出字符中的每一位,进而进行运算
c++代码
class Solution {
public:
bool isHappy(int n) {
string str;
int tmp = n;
for(int i=0;i<6;i++)//i取6其实是有点取巧,6轮以后如果还没有收敛,那么这个数就不是快乐数,当然你只要是大于6的都可以,不过占的空间可能会更多而已
{
str = to_string(tmp);
tmp = 0;
for(auto c : str)
{
tmp += (c-'0') * (c-'0');
}
if(tmp == 1)
return true;
}
return false;
}
};