暴简单的一道题,不过我还是wa了一次,提交的太急了。。
也用不上哈希,除了第一个数字外其他数字都小于等于81*9=729,开个1000的数组存储就行了。
wa在处理1时会误判为unhappy,把条件语句换下位置就解决了
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char vis[1000];
int main()
{
int n,i,j,in,help;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
memset(vis,0,1000);
scanf("%d",&in);
help=in;
while(1)
{
j=0;
while(help>=1)
{
j+=(help%10)*(help%10);
help/=10;
}
if(j==1)
{
printf("Case #%d: %d is a Happy number.\n",i,in);
break;
}
if(j==in||vis[j])
{
printf("Case #%d: %d is an Unhappy number.\n",i,in);
break;
}
else if(j!=1)
{
vis[j]=1;
help=j;
}
}
}
return 0;
}