编写一个算法,来判断数字n是否是快乐数
题目
编写一个算法来判断一个数 n 是不是快乐数。
**「快乐数」**定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。
如果 n 是快乐数就返回 True ;不是,则返回 False 。
示例1:
示例2:
思路
首先,我们需要一个函数用于解决求得数字n的各个位数的平方和问题,通过函res()来解决这一问题;其次,我们可以通过观察发现,只有各个位数和求得和等于4的时候会陷入无限循环的状态,因此,我们可以在求得各个位数平方和等于4时,返回false。
解决
class Solution {
public:
bool isHappy(int n) {
int temp;
while (true) {
temp = res(n);
if (n == 1) {
return true;
}
else if (n == 4) {
return false;
}
n = temp;
}
}
//该函数主要是用于求n的各位平方和
int res(int n) {
int res = 0;
while (n != 0) {
int temp = n % 10;
res = res + temp*temp;
n = n / 10;
}
return res;
}
};