HDOJ HDU 1715 大菲波数 ACM 1715 IN HDU string add 模板

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;
}
posted @ 2010-08-25 09:59  BuildNewApp  阅读(252)  评论(0编辑  收藏  举报