题意,给出一个数字,判断它是否是Happy Numer。
条件:
对给出的数字S0的每一位求平方和,得到下一个数字S1,再次对得到的数字S1的每一位求平方和,若出现Sn=1情况,则原始数字是Happy Number,否则就Unhappy Number。
这个题的技巧在于循环结束的条件,
开始的时候我认为某一个状态等于1或者该数字在前面出现过是结束的标志。
写个一个数组判重,结果程序跑了1s多,
看到人家的代码只有8ms,我顿时有感觉自己弱爆了,,,
其实我们不难发现,10以内只有1,7符合条件,所以我们可以判断若某一状态到了10以内切该数字不是1或者7的话,就不可能是Unhappy Number了,所以这也可成为一个结束标志。
代码如下;
#include <cstdio>
int return_value(int s)
{
int temp, tt = 0;
while(1)
{
if(s==0) break;
temp = s%10;
s /= 10;
tt+=(temp*temp);
}
return tt;
}
int main ()
{
int st, t, ok, init;
scanf("%d",&t);
for(int i = 1; i <= t; i++)
{
ok = 0;
scanf("%d",&st);init = st;
while(1)
{
if(st==1||st==7) { ok = 1; break;}
if(st<10) break;
st = return_value(st);
}
if(ok) printf("Case #%d: %d is a Happy number.\n",i, init);
else printf("Case #%d: %d is an Unhappy number.\n",i, init);
}
return 0;
}