Fibonacci数列,定义如下:
f(1)=f(2)=1
f(n)=f(n-1)+f(n-2) n>=3。
计算第n项Fibonacci数值。
Input
输入第一行为一个整数N,接下来N行为整数Pi(1<=Pi<=1000)。
Output
输出为N行,每行为对应的f(Pi)。
Sample Input
5
1
2
3
4
5
Sample Output
1
1
2
3
5
#include
#include
int a[1010][1010];
//二维数组用行坐标便于保存之前计算出来的第几个的数,否则那么大的数又要算,很浪费时间
//虽然分别来看开的数组行、列不是很大,但是二维的,所以合起来还是比较大的, 二维数组尽量开在外面
int main()
{
int T,n,m,i,j,k,count;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
memset(a,0,sizeof(a));
a[1][1]=1;
a[2][1]=1;
for(i=3,k=1;i<=n;i++) //行代表第几个数
{
for(j=1,count=0;j<=k;j++) //大数相加,列代表每个大数的数值
{
a[i][j]=a[i-1][j]+a[i-2][j]+count;
count=a[i][j]/10;
a[i][j]%=10;
}
while(count)
{
a[i][++k]=count;
count/=10;
}
}
for(i=k;i>0;i--) //i++
{
printf("%d",a[n][i]);
}
printf("\n");
}
return 0;
}