代码如下:
#include<iostream>
#include<cstring>
#include<stdlib.h>
using namespace std;
struct node
{
char s[1000];
}f[1001];
int a[1000],b[1000],c[1000];
void init()
{
int alen,blen,len,k,i,j;
memset(f[1].s,0,sizeof(f[1].s));
memset(f[2].s,0,sizeof(f[2].s));
strcpy(f[1].s,"1");
strcpy(f[2].s,"1");
for(i=3;i<=1000;i++)
{
memset(f[i].s,0,sizeof(f[i].s));
}
for(i=3;i<=1000;i++)
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
alen=strlen(f[i-1].s);
blen=strlen(f[i-2].s);
for(j=0;j<alen;j++)
a[j]=f[i-1].s[j]-'0';
for(j=0;j<blen;j++)
b[j]=f[i-2].s[j]-'0';
if(alen>blen)
len=alen;
else
len=blen;
k=0;
for(j=0;j<len;j++)
{
c[k]+=a[k]+b[k];
if(c[k]>=10)
{
c[k]%=10;
c[k+1]++;
}
k++;
for(int l=k;c[l]>=10;i++)
{
c[l]%=10;
c[l+1]++;
}
}
for(j=0;j<=k;j++)
f[i].s[j]=c[j]+'0';
}
}
int main(void)
{
int flag,n,i;
init();
scanf("%d",&n);
while(n--)
{
int t;
flag=0;
scanf("%d",&t);
for(i=999;i>=0;i--)
{
if((f[t].s[i]!='\0'&&f[t].s[i]!='0')||flag)
{
flag=1;
printf("%c",f[t].s[i]);
}
}
printf("\n");
}
system("Pause");
return 0;
}