HDOJ HDU 1715 大菲波数 ACM 1715 IN HDU

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


看题目就知道是大数了..........直接模板吧 .没什么好说的.
代码如下:
#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
}

你可能感兴趣的:(ACM)