直接用高精度加就能过了。但代码有些细节没有处理好,导致WA了很多次。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
using namespace std;
#define max 600
char a[105][max];
char b[105][max];
char c[105][max];
void initnum()
{
char ch[2]="0";
// cout<<strlen(ch)<<endl;
for(int i=0; i<100; i++)
{
strcpy(a[i],ch);
strcpy(b[i],ch);
strcpy(c[i],ch);
}
strcpy(a[0],"1");
strcpy(b[1],"1");
strcpy(c[2],"1");
}
char result[max];
void arrplus(char a[],char b[])///lena>lenb
{
// cout<<"plus:"<<a<<" "<<b<<" ";
// cout<<strlen(a)<<" "<<strlen(b)<<endl;
long long i,j,k,m,n,t;
memset(result,'\0',max);
if(strlen(a)>strlen(b))
{
// cout<<"haah"<<strlen(a)<<" "<<strlen(b)<<endl;
for(i=0; i<strlen(b); i++)
result[i]=b[strlen(b)-1-i];
for(i=strlen(a); i>strlen(b); i--)
{
//cout<<"haha"<<endl;
strcat(result,"0");
}
for(i=0; i<strlen(a); i++)
b[i]=result[strlen(result)-1-i];
// cout<<"add:"<<a<<" "<<b<<" "<<result<<endl;
}
for(i=strlen(a)-1,k=0; i>=0; i--)
{
m=(a[i]-'0')+(b[i]-'0')+k;
// cout<<"m:"<<m<<" "<<endl;
result[i]=(m%10)+'0';
k=(int)m/10;
}
if(k!=0)
{
// cout<<"haha"<<endl;
// cout<<"k: "<<k<<" "<<result<<endl;
char tmp[max]="\0";
char ch=k+'0';
tmp[0]=ch;
strcat(tmp,result);
strcpy(result,tmp);
}
// cout<<result<<endl;
}
int main()
{
long long i,j,k,m,n,t;
while(cin>>i>>j>>k)
{
initnum();
itoa(i,a[0],10);
itoa(j,a[1],10);
itoa(k,a[2],10);
for(i=3; i<100; i++)
{
if(strlen(a[i-1])>strlen(a[i-2]))
arrplus(a[i-1],a[i-2]);
else
arrplus(a[i-2],a[i-1]);
char tmp[max]="\0";
// char tmp[max]="\0";
strcpy(tmp,result);
if(strlen(result)>strlen(a[i-3]))
arrplus(tmp,a[i-3]);
else
arrplus(a[i-3],tmp);
strcpy(a[i],result);
// cout<<a[3]<<endl;
/* if(strlen(b[i-1])>strlen(b[i-2]))
arrplus(b[i-1],b[i-2]);
else
{
//cout<<"haha"<<b[1]<<endl;
arrplus(b[i-2],b[i-1]);
}
strcpy(tmp,result);
if(strlen(result)>strlen(b[i-3]))
arrplus(tmp,b[i-3]);
else
arrplus(b[i-3],tmp);
strcpy(b[i],result);
if(strlen(c[i-1])>strlen(c[i-2]))
arrplus(c[i-1],c[i-2]);
else
arrplus(c[i-2],c[i-1]);
strcpy(tmp,result);
if(strlen(result)>strlen(c[i-3]))
arrplus(tmp,c[i-3]);
else
arrplus(c[i-3],tmp);
strcpy(c[i],result);
cout<<"a:"<<a[i]<<" b:"<<b[i]<<" c:"<<c[i]<<endl;*/
}
cout<<a[99]<<endl;
}
/* t=98;
if(strlen(a[t])>strlen(b[t]))
arrplus(a[t],b[t]);
else
arrplus(b[t],a[t]);
char tmp[max]="\0";
strcpy(tmp,result);
if(strlen(tmp)>strlen(c[t]))
arrplus(tmp,c[t]);
else
arrplus(c[t],tmp);
cout<<result<<endl;*/
/* while(cin>>i>>j>>k)
{
cout<<a[98][0]*i+a[98][1]*j+a[98][2]*k<<endl;
}*/
return 0;
}