https://vjudge.net/problem/UVA-10591
题意分析:
把一个数各位数的平方相加,如果不是1,继续操作,如果是1,那么这个数是一个Happy number,如果怎么变都不能变成1,就不是一个Happy number。
解题思路:
既然是各位数的平方相加,那么最大的数几个一轮操作后一定不会超过1000,那么我只要知道1000以内的Happy number,就能知道其他的数是不是Happy number。
#include <stdio.h>
#include <string.h>
#define N 1020
int f[N];
bool book[500];
int main()
{
int i, a, T, t=0, sum, n, m;
f[1]=1;
for(i=2; i<N; i++)
{
a=i;
memset(book, false, sizeof(book));
while(a)
{
if(a==1)
{
f[i]=1;
break;
}
if(a<i)
f[i]=f[a];
sum=0;
while(a)
{
sum+=(a%10)*(a%10);
a/=10;
}
a=sum;
if(book[a]==true)
{
f[i]=0;
break;
}
book[a]=true;
}
}
scanf("%d", &T);
while(T--)
{
scanf("%d", &n);
m=n;
sum=0;
while(m)
{
sum+=(m%10)*(m%10);
m/=10;
}
if(f[sum]==1)
printf("Case #%d: %d is a Happy number.\n", ++t, n);
else
printf("Case #%d: %d is an Unhappy number.\n", ++t, n);
}
return 0;
}