经常看到菲波数的问题,我就把菲波数的数的算法(即大数相加法)记录下来

主要代码:

#include <string>
#define N 500     //最大的菲波数个数(可自己设置)
using namespace std;

string *A = new string[N];
string Sum_calc(string s1,string s2)  //大数相加法
{

    int
length;
   
    if
(s1.length()>=s2.length())
    {

        length=s1.length();
        string tmp(s1.length()-s2.length(),'0');
        s2=tmp+s2;
    }

    else

    {

        length=s2.length();
        string tmp(s2.length()-s1.length(),'0');
        s1=tmp+s1;
    }

    string sum(length,'0');
    int
carry = 0;    //carry
    for (int k=length-1;k!=-1;--k)
    {
       
        sum[k]=(s1[k]+s2[k]+carry-96)%10+48;
        carry=(s1[k]+s2[k]+carry-96>9);
    }

    if
(carry)
        sum='1'+sum;
   
    return
sum;

}

int
main()
{
  
    
 
    string *A = new string[N];    // 定义菲波数数组
    A[1]='1';
    A[2]='2';   //首两位位的初始值
    for
(int i=3; i<N; ++i)
    {

        A[i] = Sum_calc(A[i-2], A[i-1]);
    }    //将想要的N个菲波数记录(要是一一去算会超时的,直接记录用的时候就方便了)

posted on 2012-06-09 23:45  xinmenghuairi  阅读(199)  评论(0编辑  收藏  举报