NEFU592求斐波那契数列

来源:互联网 发布:mac日历垃圾广告 编辑:程序博客网 时间:2024/05/01 10:03


斐波那契

Time Limit 1000ms

Memory Limit 65536K

description

f[0]=1,f[1]=1,f[n]=f[n-1]+f[n-2],求f[n]。好熟悉的题目啊,可惜变成高精度了。

input

输入数据有多组,每组一个整数n。(1<=n<=500)

output

对于每组数据输出对应的f[n]。

sample_input

23

sample_output

23
高精度+递推(基础题目)注意在模拟加法结束后将原来的数还原
#include <iostream>#include <cstring>#define N 100000using namespace std;char f[501][N];void Bigadd(char a[],char b[],char c[]){    int n=strlen(a);    int m=strlen(b);    char temp;    int i,j,e,d;    for(i=0; i<m/2; i++)    {        temp=b[i];        b[i]=b[m-1-i];        b[m-1-i]=temp;    }    for(i=0; i<n/2; i++)    {        temp=a[i];        a[i]=a[n-1-i];        a[n-1-i]=temp;    }        d=0;        e=0;    for(i=0;i<n&&i<m;i++)    {        d=a[i]-'0'+b[i]-'0'+e;        c[i]=d%10+'0';        e=d/10;    }    if(i==m)    {        for(;i<n;i++)        {            d=a[i]-'0'+e;            c[i]=d%10+'0';            e=d/10;        }    }    if(i==n)    {        for(;i<m;i++)        {            d=b[i]-'0'+e;            c[i]=d%10+'0';            e=d/10;        }    }    if(e)        c[i++]=e+'0';    //c[i]='0';    int t=i;    for(i=0; i<t/2; i++)    {        temp=c[i];        c[i]=c[t-1-i];        c[t-1-i]=temp;    }    for(i=0; i<m/2; i++)    {        temp=b[i];        b[i]=b[m-1-i];        b[m-1-i]=temp;    }    for(i=0; i<n/2; i++)    {        temp=a[i];        a[i]=a[n-1-i];        a[n-1-i]=temp;    }}int main(){    int s;    while(cin>>s)    {        f[0][0]='1';        f[1][0]='1';        for(int i=2;i<=s;i++)        {            Bigadd(f[i-1],f[i-2],f[i]);        }        cout<<f[s]<<endl;    }    return 0;}


                                             
0 0