• HDU 1715 大菲波数


    大菲波数

    问题描述 :

    Fibonacci数列,定义如下: f(1)=f(2)=1 f(n)=f(n-1)+f(n-2)  n>=3。 计算第n项Fibonacci数值。

    输入:

    输入第一行为一个整数N,接下来N行为整数Pi(1<=Pi<=1000)。

    输出:

    输出为N行,每行为对应的f(Pi)。

    样例输入:

    5
    1
    2
    3
    4
    5

    样例输出:

    1
    1
    2
    3
    5

    思路同博客中上一道题1042 N!  均是大数加法原则,考虑到位数较多,所以采用数组。一维数组可以么?可以,但考虑到较为繁琐。所以采用二维数组,a[i][j] 其中i 表示 整数pi , j表示求得结果的位数。本题同样采用10进制,逢十进一。(有的程序可能去除以自己定义的数100,1000,10000等等)。

    #include<iostream>
    #include<cstring>
    using namespace std;
    int f[1001][2001];
    int main()
    {
        int m;
        int n;
        cin>>n;
        memset(f,0,sizeof(f));
        f[1][0]=1;
        f[2][0]=1;
        for(int i=3;i<1001;i++)
        {
            for(int j=0;j<2001;j++)
            {
                f[i][j]+=f[i-1][j]+f[i-2][j];//+=号别错了  因为考虑到f[i][j]可能是之前计算的进位 
                if(f[i][j]>=10)
                {                
                    f[i][j+1]=f[i][j]/10;//注意此处不要颠倒 
                    f[i][j]=f[i][j]%10;
                }
            }
        }
        while(n--)
        {
            cin>>m;
            int flag=0;//控制输出的 
            for(int i=1010;i>=0;i--)//考虑到进位可能比较多所以稍大点 
            {
                if(flag==0&&f[m][i]!=0)
                   flag=1;
               if(flag)
                cout<<f[m][i];
            }
            cout<<endl;
        }
        
        return 0;
    }
    View Code


     

  • 相关阅读:
    [ Virtuoso ] 增加自定义 Layer 需要做哪些事?
    [ ENV ] 记录一些自己比较喜欢的初始化语句
    [ SVRF ] 学习笔记
    [ Skill ] 键位不够用之 右键 Menu
    ubuntu创建桌面快捷方式
    git常用命令
    架设Git服务器
    Linux下安装redis
    mysql查询语句
    mysql数据库基本操作
  • 原文地址:https://www.cnblogs.com/wft1990/p/5867550.html
Copyright © 2020-2023  润新知