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';
        
forint 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
}
 posted on 2010-08-18 16:00  MiYu  阅读(437)  评论(0编辑  收藏  举报