leetcode.202.快乐数(C语言)

1.题目如下

在这里插入图片描述
2.思路解法
这道题对快乐数做了一个定义,其中很重要的一个点就是第二点,这个数可能最后变为1,也可能会无限循环,他这里这个无限循环的意思是之前出现过的数会重复出现,如果没有理解到这个点这题就会比较难受,那么现在我们要做的就是看数会不会重复了,也就是要查重,那么我们第一时间就应该想到哈希表了,当然还有有一个点就是要求我们不断的求和,那么我们就可以单独定义一个函数来做求和操作。

int getsum(int n)
    {
        int sum=0;
        while(n!=0)
        {
            sum=sum+(n%10)*(n%10);
            n=n/10;
        }
        return sum;
    }
这个就是一个求和的函数。 

我们的函数主题是在有一个循环之中的,每一次循环我们需要对sum进行判断看它等不等于1,还要对sum进行查重,如果重复了我们就要返回false。
完整代码

int getsum(int n)
    {
        int sum=0;
        while(n!=0)
        {
            sum=sum+(n%10)*(n%10);
            n=n/10;
        }
        return sum;
    }//求和函数;
bool isHappy(int n){
    int s[1000]={0};//2的31次方是一个10位数,每个位置上的数字平方和也不可能超过810;
    int sum;
    while(1)
    {
        sum=getsum(n);
        n=sum;
        s[sum]++;//记录sum出现次数
        if(sum==1)
        {
            return true;
        }
        else if(s[sum]>1)
        {
            return false;
        }

    }

}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值