zoj - 1828 - Fibonacci Numbers

来源:互联网 发布:js返回上一个页面 编辑:程序博客网 时间:2024/05/16 12:24

遇到高精度的题目,曾经是多么的不快,可是一次又一次硬着头皮写了过后,觉得,高精度的题目也想像中的那么烦……

这道大斐波数,更是乌龙,原来打算从右边找到不为0的位置来确定长度,不慎将 “!=” 写成了 “==” ,奇迹的是竟然AC了!

后来发现,把数为0的位也相加,不影响结果,还省去了求长度的麻烦,当然,占的内存多了点,哈哈!微笑

#include <iostream>#include <string.h>using namespace std;int f[5010][1010];       //第1个5010用来存5010个斐波那契数(测试可知第5000项已超过了1000位),第2个1010表示给每个斐波那契数开1010位int main(){    int i, j;    memset(f, 0, sizeof(f));    f[1][0] = 1;        //给第1个斐波那契数置数    f[2][0] = 1;        //给第2个斐波那契数置数    for(i = 3; i < 5010; i++)      //从第3项开始,用前2项相加    {        int C = 0;      //C表示进位,开始设为0        for(j = 0; j < 1001; j++)        {            f[i][j] = (f[i-2][j] + f[i-1][j] + C) % 10;     //%10后就是这一位该有的数字            C = (f[i-2][j] + f[i-1][j] + C) / 10;       //相加产生的进位        }    }    int a;    while(cin>>a)    {        for(j = 1001; j >= 0; j--)      //寻找最高位            if(f[a][j] != 0)                break;        for(; j >= 0; j--)            cout<<f[a][j];        cout<<endl;    }    return 0;}


原创粉丝点击