判断一个正整数是否是快乐数字?
如果一个数字能够通过有限次快乐变换成为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 }