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
其实就是模拟加法。数据太大要先打表。另外第1000项有300多位。。。
以下是AC代码
#include <iostream>
#include <cstring>
using namespace std;
char ans[1002][350], tmp1[350], tmp2[350];
void add(char *a, char *b, char *c) //默认a > b
{
int lenA = strlen(a), lenB = strlen(b), len = lenA - lenB, t = 0, i;
for(i = lenB-1;i >= 0;i--)
{
b[i+len] = b[i];
}
for(i = 0;i < len;i++) b[i] = '0';
c[0] = '0';
for(i = lenA-1;i >= 0;i--)
{
c[t++] += a[i] + b[i] - 2*'0';
if(c[t-1]-'0' >= 10)
{
c[t-1] -= 10;
c[t] = '1';
}
else c[t] = '0';
}
if(c[t] > '0') c[t+1] = '\0';
else c[t] = '\0';
}
int main()
{
int n, x, i;
strcpy(ans[1], "1"), strcpy(ans[2], "1");
for(i = 3;i <= 1000;i++) //打表
{
strcpy(tmp1, ans[i-1]);
strcpy(tmp2, ans[i-2]);
add(tmp1, tmp2, ans[i]);
strrev(ans[i]); //反转
}
cin>>n;
while(n--)
{
cin>>x;
cout<<ans[x]<<endl;
}
return 0;
}