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 ;
}