判断一个正整数是否是快乐数字?
如果一个数字能够通过有限次快乐变换成为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中的数据有重复, 便可判断为“非快乐数”。
代码如下:
#include<stdio.h>
int main(){
int n, a[100000000];
while(scanf("%d",&n)==1&&n!=-1){
int sum=0, cnt=0, happy=0;
while(1){
int k=n%10, rep=0;
sum += (k*k);
n /= 10;
if(n==0){
if(sum==1){
happy=1;
break;
}
else{
for(int i=0;i<cnt;i++){
if(a[i]==sum){
rep=1;
break;
}
}
if(rep)
break;
else{
a[cnt]=sum;
n=sum;
sum=0;
cnt++;
}
}
}
}
if(happy)
printf("true\n");
else
printf("false\n");
}
return 0;
}