题目: 编写一个算法来判断一个数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)
{ // nprintf("\nn = %d", n);// resultprintf("\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;
}
执行结果: