挺水的一题,之前想复杂了,先把数字变成字符串,再哈希。。。再输入到字符串数组里。。。。。
后来一想这数字直接映射就可以了。。。
然后我果断把Unhappy敲成了Unappy,领了好几发WA。。这个教训告诉我以后一定要复制过来,亏我敲的时候还想这么简单的单词我不可能拼错吧。。。
#include <cstdio>
#include <cstring>
using namespace std;
int head[1000];
int main()
{
//freopen("input.txt", "r", stdin);
int T, i, j, sum, num, ori, cases = 1;
scanf("%d", &T);
while (T--)
{
memset(head, 0, sizeof(head));
scanf("%d", &num);
ori = num;
while (true)
{
sum = 0;
while (num)
{
int temp = num % 10;
sum += temp * temp;
num /= 10;
}
if (sum == 1)
{
printf("Case #%d: %d is a Happy number.\n", cases++, ori);
break;
}
else if (head[sum] || sum == ori)
{
printf("Case #%d: %d is an Unhappy number.\n", cases++, ori);
break;
}
head[sum] = 1;
num = sum;
}
}
return 0;
}