1、题目描述
编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。如果 n 是快乐数就返回 True ;不是,则返回 False 。
示例:
输入:19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1
2、题目分析
解题思路
①判断n==1
②具体思路如图解:
③细节注意:while判断需要配合result和每个数的位数n,不然31、91这类的数就会只算一次就跳出而输出
3、代码实现
代码如下:
bool isHappy(int n)
{
int temp=0;
int result=0;
if(n==1)return true;
while(result!=1||n!=0)
{
temp=n%10;
n/=10;
result=temp*temp+result;
if(result==1&&n==0)return true;
if(n==0)
{
n=result;
result=0;
if (n == 4 || n == 16 || n == 37 || n == 58 || n == 89 || n == 145 || n == 42 || n == 20)return false;
}
}
return false;
}
4、题解心得
1、这道题官方给出的解答也是判断循环节,不足之处在于while循环的运算时间较多,有能力的可以考虑用更佳的代码实现,欢迎评论交流,一起打怪升级!
2、欢迎关注CSDN ID:zhd5120153951
博客域名:https://blog.csdn.net/zhd5120153951