题目描述:
编写一个算法来判断一个数是不是“快乐数”。
一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。
示例:
输入: 19
输出: true
解释:
1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1
解题思路:
非快乐数字在进行循环计算过程中会得到数字4
输入:18
输出:false
解释:
1^2 + 8^2 = 65
6^2 + 5^2 = 61
6^2 + 1^2 = 37
3^2 + 7^2 = 58
5^2 + 8^2 = 89
8^2 + 9^2 = 145
1^2 + 4^2 + 5^2 = 42
4^2 + 2^2 = 20
2^2 + 0^2 = 4
......
AC代码:
bool isHappy(int n) {
int temp = n;
while(1)
{
temp = CountFunction(temp);//循环调用计算函数后得到结果进行值得判定
if(temp == 4)//非快乐数的数字在进行计算的过程中都会得到数字4
{
break;
}
if(temp == 1)
{
return true;
}
}
return false;
}
//CountFunction函数用来进行循环的平方和计算
int CountFunction(int temp)
{
int sum = 0;
int mid;
while(temp != 0)
{
mid = temp % 10;
temp = temp / 10;
sum = sum + mid * mid;
}
return sum;
}