C/C++ 快乐数: 编写一个算法来判断一个数n是不是快乐数

2023-12-13 11:25:01

题目: 编写一个算法来判断一个数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;
}

执行结果:

文章来源:https://blog.csdn.net/wendyWJGU/article/details/134924679
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。