Description
Fibonacci数列,定义如下:
f(1)=f(2)=1
f(n)=f(n-1)+f(n-2) n>=3。
计算第n项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
题解:和nyoj 光棍的yy是一样的题型,加深一下印象:大数斐波那契用二维数组存放,然后按照大数加法运算,再会找到最高非0位 倒序输出。(更详解见
nyoj 光棍的yy)
代码:
#include <cstdio>
#include <cstring>
int fi[1010][1010];
void fibnic()
{
int b;
fi[1][0]=1;
fi[2][0]=1;
for(int i=3;i<1010;i++)//二维数组存放菲波那契大数+大数加法 +打表
{
b=0;
for(int j=0;j<1010;j++)
{
fi[i][j]=(fi[i-1][j]+fi[i-2][j]+b)%10;
b=(fi[i-1][j]+fi[i-2][j]+b)/10;
}
}
}
int main()
{
fibnic();
int p,t,f;
scanf("%d",&t);
while(t--)
{
scanf("%d",&p);
for(int i=1000;i>=0;i--)
{
if(fi[p][i]!=0)
{
f=i;
break;
}
}
for(int i=f;i>=0;i--)
printf("%d",fi[p][i]);
printf("\n");
}
return 0;
}