学渣带你刷Leetcode0202. 快乐数

题目描述

编写一个算法来判断一个数 n 是不是快乐数。

「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为  1,那么这个数就是快乐数。

如果 n 是快乐数就返回 True ;不是,则返回 False 。

 

示例:

输入:19
输出:true
解释:
1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/happy-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

白话题目:

每个数都能拆分成一位一位的数字,拆完后就平方再求和,得出来的数的平方只要大于10,就继续算,看能不能等于1,

这里面有一个事它说得含糊不清的,就是什么时候算完,

关键在这里。

                                   我欲成仙、快乐齐天

算法:

思路就是每个数字在经过若干运算之后总能变成一位数,而在所有一位数中只有1和7能在若干运算之后结果为1,

发现这一点以后我们将n经过若干次迭代成一位数后,判断其是否为1或7即可。

可是你会写吗?

C语言完全代码

#include <stdio.h>
#include <stdlib.h>
#include<stdbool.h>

int squaresum(int n)
{
    int res=0;
    while(n/10!=0)
    {
        int temp;
        temp=n%10;  //最后一位
        res+=temp*temp;
        n=n/10;
    }
    res=res+n*n;

    return res;
}
bool isHappy(int n)
{
    while(n>9)
        n=squaresum(n);
    if(n==1||n==7)
        return 1;
    return 0;
}


int main()
{
    int n=0;
    scanf("%d",&n);
    int result=isHappy(n);
    printf("%d",result);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值