题目: 编写一个算法来判断一个数n是不是快乐数。
快乐数的定义:
对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
如果这个过程 结果为 1,那么这个数就是快乐数。
如果 n 是 快乐数 就返回 true ;不是,则返回 false 。
示例 1:
输入:n = 19
输出:true
示例 2:
输入:n = 2
输出:false
示例 3:
输入:n = 5
输出:false
解析: 使用快指针和慢指针,如果快指针追上了慢指针,说明进入了循环
如果循环值为1,则为快乐数。
示例源码:
// Len_IsHappy.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
int NextData(int n)
{
int data = 0;
while (n > 0)
{
int ge = n % 10;
data += ge * ge;
n = n / 10;
}
return data;
}
bool isHappy(int n)
{
int slow = n;
int fast = n;
do{
slow = NextData(slow);
fast = NextData(NextData(fast));
} while (slow != fast);
return slow == 1;
}
void PrintStr(int n, bool bResult)
{
// n
printf("\nn = %d", n);
// result
printf("\nbResult = %s\n", (bResult != 0) ? ("true") : ("false"));
}
int _tmain(int argc, _TCHAR* argv[])
{
int n = 19;
bool bResult = isHappy(n);
PrintStr(n, bResult);
n = 2;
bResult = isHappy(n);
PrintStr(n, bResult);
n = 5;
bResult = isHappy(n);
PrintStr(n, bResult);
return 0;
}
执行结果: