bool isAdditiveNumber(char * num){
int i, j, k, len=strlen(num), pst1=0, pst2=0, bit=0, third;
char* tmp1=(char*)calloc(22,sizeof(char));
char* tmp2=(char*)calloc(22,sizeof(char));
char* tmp3=(char*)calloc(22,sizeof(char));
for (i=1; i<=len/2; i++){
if(i>1 && num[0]=='0')
break;
for (j=i+1; j<len && j-i<=len/2; j++){
memset(tmp1,0x30,21);
memcpy(tmp1+21-i,num,i*sizeof(char));
if(j-i>1 && num[i]=='0')
break;
memset(tmp2,0x30,21);
memcpy(tmp2+21-(j-i),num+i,(j-i)*sizeof(char));
third=j;
pst2=( 21-(j-i) < 21-i )?21-(j-i) :21-i;
while(third<len){
memset(tmp3,0x30,21);
for (k=20; k>=pst2-1; k--){
tmp3[k] += (tmp1[k]-'0'+tmp2[k]-'0'+bit)%10;
bit=(tmp1[k]-'0'+tmp2[k]-'0' +bit >= 10)?1 :0;
}
while(k<20 && tmp3[k]=='0')
k++;
if(strncmp(tmp3+k,num+third,20-k+1) == 0){
char* p=tmp1;
tmp1=tmp2;
tmp2=tmp3;
tmp3=p;
third+=20-k+1;
pst2=k;
}
else
break;
}
if(third==len)
return true;
}
}
return false;
}