LeetCode 202.快乐数 Happy Number

题目链接

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

例如:

输入19

1²+9²=82

8²+2²=68

6²+8²=100

1²+0²+0²=1

所以19是快乐数。


问题的难度在于怎么结束循环


我一开始想着,任何正整数,经过若干次的运算后,总会小于100。然后自己算出100以内的快乐数,然后与结果一一比较,有相等的,则说明是快乐数。

然后我错了,因为100以内的快乐数,我没找全。

然后想着,任何正整数,经过若干次的运算后,总会小于10。而且,10以内的快乐数很好找,就1和7。

代码如下:

class Solution {
public:
    bool isHappy(int n) {
        int sum,k,j;
        while(n>=10)//经过若干次计算后,总会小于10
        {
            sum=0;
            k=n;
            while(k)//每个位置的数字的平方和
            {
                j=k%10;
                sum+=j*j;
                k/=10;
            }
            n=sum;
        }
        if(n==1||n==7) return true;//至于7是怎么得出来的,因为1~9里,只有1和7结束了循环
        else return false;
    }
};

猜你喜欢

转载自blog.csdn.net/ZRXSLYG/article/details/80589376