题意,给出一个数字,判断它是否是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; }