bool isHappy(int n) {
if(n<=0)
return false;
bool isIndatas(int*,int,int);
int N=50;
int* datas=(int*)malloc(N*sizeof(int));
datas[0]=n;
int index=1;
bool result=false;
int m=n;
int q=10;
long int sum=0;
do{
while(m){
int k=m%q;
sum+=k*k;
m=m/q;
}
m=sum;
if(isIndatas(datas,index,m)){
result=false;
break;
}
else
datas[index++]=m;
if(index==N){
N*=2;
datas=(int*)realloc(datas,N);
}
sum=0;
}while(m!=n&&m!=1);
free(datas);
if(m==1)
result=true;
return result;
}
bool isIndatas(int* datas,int len,int m){
if(datas==NULL||len<=0)
return false;
for(int i=0;i<len;i++)
if(datas[i]==m)
return true;
return false;
}
if(n<=0)
return false;
bool isIndatas(int*,int,int);
int N=50;
int* datas=(int*)malloc(N*sizeof(int));
datas[0]=n;
int index=1;
bool result=false;
int m=n;
int q=10;
long int sum=0;
do{
while(m){
int k=m%q;
sum+=k*k;
m=m/q;
}
m=sum;
if(isIndatas(datas,index,m)){
result=false;
break;
}
else
datas[index++]=m;
if(index==N){
N*=2;
datas=(int*)realloc(datas,N);
}
sum=0;
}while(m!=n&&m!=1);
free(datas);
if(m==1)
result=true;
return result;
}
bool isIndatas(int* datas,int len,int m){
if(datas==NULL||len<=0)
return false;
for(int i=0;i<len;i++)
if(datas[i]==m)
return true;
return false;
}