编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」 定义为:
对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
如果这个过程 结果为 1,那么这个数就是快乐数。
如果 n 是 快乐数 就返回 true ;不是,则返回 false 。
示例 1:
输入:n = 19
输出:true
解释:
1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1
示例 2:
输入:n = 2
输出:false
#include <stdio.h>
#include <stdlib.h>
/*
快乐数会有两种情况:
情况1:最终回到1;
情况2:陷入无限循环当中;
有个规律
1.是快乐数循环肯定经过1
2.不是快乐数循环肯定经过4
先理解题目要求,这道题的要点一共有两个:
做完某次计算后等于 1,跳出循环,不必多说。
在计算的过程中无限循环始终不变为 1,
也就是说,它的计算结果 sum 会重复出现,这是本题的关键,
若在循环的过程中 sum 重复出现,说明它永远不可能等于 1,跳出循环。
*/
int main(int argc, char *argv[]) {
int n;
scanf("%d", &n);
while(1)
{
if(n==4){printf("NO"); break;}
if(n==1){printf("YES"); break;}
int new_n=0;
while(n>0)
{
int t = n%10;
new_n += t*t;
n/=10;
}
n=new_n;
}
return 0;
}