HihoCoder-1370 快乐数字

判断一个正整数是否是快乐数字?
如果一个数字能够通过有限次快乐变换成为1,则是快乐数字。
快乐变换是对一个数字的每一位的平方数求和。
例如:
对于68
68 => 62+82= 100
100 => 12 + 02 + 02 = 1
因此68是快乐数字

Input
每一行输入一个整数,代表n;如果n为-1,表示输入结束。(n <= 100000000)

Output
针对每组数据,输出是否是快乐数字 true/false

Sample Input
68

-1

Sample Output
ture

这道题的思路是将每一次的sum结果,即每一次计算出的平方和保存在数组a中,一旦某一次的结果和a中的数据有重复, 便可判断为“非快乐数”。

代码如下:

 1 #include<stdio.h>
 2 int main(){
 3     int n, a[100000000];
 4     while(scanf("%d",&n)==1&&n!=-1){
 5         int sum=0, cnt=0, happy=0;
 6         while(1){
 7             int k=n%10, rep=0;
 8             sum += (k*k);
 9             n /= 10;
10             if(n==0){
11                 if(sum==1){
12                     happy=1;
13                     break;
14                 }else{
16                   for(int i=0;i<cnt;i++){
17                     if(a[i]==sum){
18                         rep=1;
19                         break;
20                     }
21                  }
22                  if(rep) break;
24                  else{
25                        a[cnt]=sum;
26                       n=sum;
27                       sum=0;
28                      cnt++;
29                     }
30                 }    
31           }   
32         }
33         if(happy) printf("true\n");
35         else printf("false\n");
37     }
38     return 0;
39 }

猜你喜欢

转载自www.cnblogs.com/zuoyunfan/p/9813482.html
今日推荐