斐波那契函数 不过因为有1000个数据 所以要用大数

#include <cstring>
#include <cstdio>
#define N 1000

char s[1002][N];
void ans(int *a, int *b)
{
    for(int i=0; i<N; ++i)
        a[i]=b[i];
}
void _ans(char *s, int *a)
{
    int k=N-1;
    int j=0;
    for(; k>=0; --k)
        if(a[k]) break;
    for(int i=k; i>=0; --i) s[j++]=a[i]+'0';
}
void solve()
{
    int a[N];
    int b[N];
    int c[N];
    memset(a, 0, sizeof(a));
    memset(b, 0, sizeof(b));
    memset(c, 0, sizeof(c));
    memset(s, 0, sizeof(s));
    a[0]=1;
    b[0]=2;
    s[0][0]='1';
    s[1][0]='2';
    for(int i=2; i<1001; ++i)
    {
        int m=0;
        for(int j=0; j<N; ++j)
        {
            c[j]=a[j]+b[j]+m;
            m=c[j]/10;
            c[j]=c[j]%10;
        }
        _ans(s[i],c);
        ans(a,b);
        ans(b,c);
    }
}
int main()
{
    solve();
    int n;
    while(scanf("%d",&n)==1)
    {
        printf("%s\n",s[n]);
    }
    return 0;
}
View Code

 

posted on 2013-11-04 22:27  风流monkey  阅读(111)  评论(0编辑  收藏  举报