10591 - Happy Number

/*
简单题
题意:S0每位数字的平方之和为S1,一次推理,如果出现Si=1,输出p1。
不出现,输出p2。
思路:第一次做的时候超时,没计算出一个新的temp需要与前面的所有数字进行一次判断
使用hash做记录
*/

#include <cstdio>
#include <cstring>
int hash[10000];
bool check(int k,int n)
{
	int temp=0;
	while(k!=0)
	{
		int a=k%10;
		temp+=a*a;
		k/=10;
	}
	if(temp==1)
		return true;
	else if(!hash[temp])
	{
		hash[temp]=1;
		return check(temp,n);
	}
	else
		return false;
}
int main()
{
	//freopen("data.in","r",stdin);
	int T;
	int cas=1;
	scanf("%d",&T);
	while(T--)
	{
		memset(hash,0,sizeof(hash));
		int n;
		scanf("%d",&n);
		if(check(n,n))
			printf("Case #%d: %d is a Happy number.\n",cas,n);
		else
			printf("Case #%d: %d is an Unhappy number.\n",cas,n);
		cas++;
	}
	return 0;
}

你可能感兴趣的:(10591 - Happy Number)