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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值