大菲波数
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 22722 Accepted Submission(s): 8163
Problem Description
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
Source
#include<stdio.h>
#include<string>
#include<iostream>
using namespace std;
#define N 1010
string a[N];
string add(string s1,string s2)//模板
{
int len1=s1.size();
int len2=s2.size();
if(len1<len2)
{
swap(s1,s2);
swap(len1,len2);
}
int c=0;
for(int i=len1-1,j=len2-1;i>=0;i--,j--)
{
c+=s1[i]-'0';
if(j>=0)
c+=s2[j]-'0';
s1[i]=c%10+'0';
c/=10;
}
if(c)
s1='1'+s1;
return s1;
}
int main()
{
ios::sync_with_stdio(false);//加快cin,cout的速度
cin.tie(0);
int n;
a[1]='1';
a[2]='1';
for(int i=3;i<1005;i++)
a[i]=add(a[i-1],a[i-2]);
int t;
cin>>t;
while(t--)
{
cin>>n;
cout<<a[n]<<endl;
}
return 0;
}