二维数组存数,开始的一维存的是1000个菲波数,后面那一维是用来存数字的。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int N = 1010;
const int Max = 2500;
int f[N][Max];
int main()
{
int j;
memset(f,0,sizeof(f));
f[1][0]=f[2][0]=1;
for(int i=3;i<N;i++)
{
for(j=Max-1;j>=0;j--)
if(f[i-1][j]!=0) break;
for(int k=0;k<=j;k++)
{
f[i][k]+=(f[i-1][k]+f[i-2][k]);
if(f[i][k]>=10)
{
f[i][k]-=10;
f[i][k+1]++;
}
}
}
int T,n,i;cin>>T;
while(T--)
{
scanf("%d",&n);
for( i=Max-1;(i>=0&&f[n][i]==0);i--);
for(;i>=0;i--)
printf("%d",f[n][i]);
printf("
");
}
return 0;
}