题目:
编写一个算法来判断一个数是不是“快乐数”。
一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。
示例:
输入: 19
输出: true
解释: 1*1+9*9=82
8*8 + 2*2 = 68
6*6 + 8*8 = 100
1*1 + 0*0 + 0*0 = 1
思路方法:
这道题的思路不算太难,主要就是要我们设计一个算法循环计算输入的正整数每一位的平方之和是否为0。
然后就可以用一个while()循环去解决这个问题,循环的条件就是输入的正整数除以10,然后判断改变之后的数是否为0(即直到这个数变为个位数结束),这是函数里的一大部分吧,但是还有一个问题就是:如果这个数不是快乐数,那在循环里面就不可能出现和为1,那这个循环就成了死循环了。我自个想了半天,没想出来,所以只好在百度上寻求答案了,最后找到了,在那个循环里面,我们家一个对和值的判断就可以了,如果和值为4,那么之后就是死循环了,所以出现4,就返回false就OK了。后来我经过计算发现如果输入的正整数小于等于4并且大于1,那么他就不是快乐数,所以我就在最前面直接排除了,省点时间。
代码如下:
class Solution{
public:
bool result(int n)
{
int sum1; //定义一个变量,为后来记录和值用
if(n<=0||n<=4&&n>1)
{
return false;
}
else
{
while(n!=1)
{
while(n!=0)
{
int sum=0;
sum+=(n%10)*(n%10);
n=n/10;
sum1=sum;
}
n=sum1;
if(n==4)
{
return false;
}
}
return true;
}
}
};