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;
}
}
}