快乐数字

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值