AC代码
/*以十进位为例:
2 8 → 22+82=68 → 62+82=100 → 12+02+02=1
3 2 → 32+22=13 → 12+32=10 → 12+02=1
3 7 → 32+72=58 → 52+82=89 → 82+92=145 → 12+42+52=42 → 42+22=20 → 22+02=4 → 42=16 → 12+62=37……
因此28和32是快乐数,而在37的计算过程中,37重覆出现,继续计算的结果只会是上述数字的循环,不会出现1,因此37不是快乐数。
不是快乐数的数称为不快乐数(unhappy number),所有不快乐数的数位平方和计算,
最後都会进入 4 → 16 → 37 → 58 → 89 → 145 → 42 → 20 → 4 的循环中。
在十进位下,100以内的快乐数有(OEIS中的数列A00770) :1, 7, 10, 13, 19, 23, 28, 31, 32, 44, 49, 68, 70, 79, 82, 86, 91, 94, 97, 100。
*/
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
int main()
{
long long num;
while(~scanf("%lld",&num))
{
long long sum=0;
while(num!=1)
{
while(num!=0)
{
sum=sum+(num%10)*(num%10);
num=num/10;
}
num=sum;
sum=0;
if(num==4||num==16||num==37||num==58||num==89||num==145||num==42||num==20)
{
printf("NO\n");
break;
}
else if(num==1)
{
printf("YES\n");
break;
}
}
}
return 0;
}