一个“快乐数”定义为,对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变成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;
}
};