解法一:
//这里需要做两个函数,一个int next_n(int n)
int next_n(int n)//用来完成数字各个位的值的平方相加的功能
{ int r=0;
while(n)
{
r+=(n%10)*(n%10);
n=n/10;
}
return r;
}
//还有一个用来查找每次得出的结果的值是否在之前出现过
bool tain(int *history,int size,int n)
{
int i=0;
for(i=0;i<size;i++)
{
if(n==history[i])
{
return true;
}
}
return false;
}
bool isHappy(int n){
//int history[10000];//用来存储每次得出的值
//int size=0;
//while(!tain(history,size,n))//如果每次n的值在history函数中出现过,就返回,true,否则false,这里是取反,没有相同值的时候就继续运算next_n();
//{
// history[size]=n;
// size++;
// n=next_n(n);
//}
//return n==1;//这里因为tain返回值为真,while就跳出,再判断是否相同值为一,如果为一,就说明是快乐数字
}
方法二:
运用龟兔赛跑的算法
因为slow为乌龟,乌龟跑一次,兔子跑两次,最终他们总会有相同的值的时候,如果他们相同时,再判断其中的一个是否为一,如果成立,函数返回true,否则false