zoj 1828 Fibonacci Numbers

zoj 1828 Fibonacci Numbers

/*
这难道说是传说中的坑D题么??
让输入多组数据一点提示都不给
难怪测试数据正确却一直WA
先是怀疑N定义的不够大
后来又怀疑memset()和memcpy()数据太大可能不支持
最后发现竟然是。。。
哎,不说了
上代码
以后引以为鉴
其实即使是单组数据
按多组数据来处理也是可以的 
所以以后都按多组数据处理
保险! 
*/
#define LOCAL
#include<iostream>
#include<cstring>
#define N 1001
using namespace std;
int main()
{
#ifdef LOCAL
       freopen("input.txt","r",stdin);
       freopen("output.txt","w",stdout);
#endif
    int sum[N],a[N],b[N],n,i,j,t;
    while(cin>>n)
    {
        if(n<=2)
        {cout<<1<<endl;continue;}
        n-=2;
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        memset(sum,0,sizeof(sum));
        a[0]=b[0]=1;
        while(n--)
        {
           for(i=0;i<N;i++)
              sum[i]=a[i]+b[i];
           for(i=0;i<N;i++)
           {
              t=sum[i]/10;
              sum[i]=sum[i]%10;
              sum[i+1]+=t;                
            }   
            memcpy(a,b,sizeof(int)*N);
            memcpy(b,sum,sizeof(int)*N);            
        }
        i=N-1;
        while(!sum[i]) i--;
        for(;i>=0;i--)
            cout<<sum[i];
        cout<<endl;
    }
    return 0;
}

发表回复