MiYu原创, 转帖请注明 : 转载自 ______________白白の屋
题目地址:
http://acm.hdu.edu.cn/showproblem.php?pid=1715
题目描述:
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
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 <iostream>
#include <string>
using namespace std;
string Add(string fNum,string sNum)
{
if( fNum.length() < sNum.length() ) fNum.swap(sNum);
string A = "0";
A += fNum;
for ( int i=1;i<=fNum.length();i++)
if(i<=sNum.length())
A[A.length()-i]+=sNum[sNum.length()-i]-'0';
for( int i=1;i<A.length();i++)
{
if(A[A.length()-i]>'9')
{ A[A.length()-i]-=10;A[A.length()-i-1]+=1; }
}
while(A[0]=='0') A.erase(0,1);
return A;
}
string F[1001] = { "0", "1", "1" };
void setNum ()
{
for ( int i = 3; i != 1001; ++ i )
{
F[i] = Add ( F[i-1] , F[i-2] ) ;
}
}
int main ()
{
int T;
setNum ();
while ( cin >> T )
{
while ( T -- )
{
int N;
cin >> N;
cout << F[N] << endl;
}
}
return 0;
}
#include <string>
using namespace std;
string Add(string fNum,string sNum)
{
if( fNum.length() < sNum.length() ) fNum.swap(sNum);
string A = "0";
A += fNum;
for ( int i=1;i<=fNum.length();i++)
if(i<=sNum.length())
A[A.length()-i]+=sNum[sNum.length()-i]-'0';
for( int i=1;i<A.length();i++)
{
if(A[A.length()-i]>'9')
{ A[A.length()-i]-=10;A[A.length()-i-1]+=1; }
}
while(A[0]=='0') A.erase(0,1);
return A;
}
string F[1001] = { "0", "1", "1" };
void setNum ()
{
for ( int i = 3; i != 1001; ++ i )
{
F[i] = Add ( F[i-1] , F[i-2] ) ;
}
}
int main ()
{
int T;
setNum ();
while ( cin >> T )
{
while ( T -- )
{
int N;
cin >> N;
cout << F[N] << endl;
}
}
return 0;
}