高精度加法之二

 

Time Limit: 1 Sec  Memory Limit: 128 MB

 

Submit: 47  Solved: 15
原题链接

 

Description

菲波拉契数列大家都知道了。
f(1) = 1, f(2) = 1, f(n > 2) = f(n - 1) + f(n - 2)
现在希望你求这个数列第N列

Input

一个数N,N<=5000

Output

如题

Sample Input

100 

Sample Output

354224848179261915075 

HINT

 

Source

 
#include<iostream>
void Add(int *a,int *b,int *c)     //十进制加法 
{
    
    for(int i=9999;i>=0;i--)
    {
        c[i]+=a[i]+b[i];
        if(c[i]>=10)
        {c[i-1]++;c[i]-=10;}    
    }
}

void Cpy_num(int *a,int *b)   //数组复制 
{
    for(int i=0;i<10000;i++)
    {a[i]=b[i];}
}


void Fibnocci(int n,int *F)
{
    int f1[10000]={0},f2[10000]={0},t[10000]={0};    
    f1[9999]=f2[9999]=1;
    
    if(n<=2)
    {F[9999]=1;return;}
    for(int i=3;i<=n;i++)
    {
        Cpy_num(F,t);     //仿照普通计算即可 
        
        Add(f1,f2,F);
        
        Cpy_num(f1,f2);
        
        Cpy_num(f2,F);
    
    }
    
}


using namespace std;
main()
{
    int F[10000]={0};
    int i,j,n;
    scanf("%d",&n);
    
    Fibnocci(n,F);
    
    for(j=0;j<10000;j++)  //去前导零 
    {
        if(F[j]!=0)
        {break;}
    }
    
    
    for(i=j;i<10000;i++)
    {printf("%d",F[i]);}
    
}

 



 
 
posted @ 2017-03-17 15:20  dearvee  阅读(186)  评论(0)    收藏  举报