zoukankan      html  css  js  c++  java
  • 斐波那契+大数相加

    Description

    不知道Alice是从哪里听到Fibonacci数列,并对它发生了浓厚的兴趣。她想看看这个数列的递增过程是怎样的。

    众所周知,Fibonacci数列的第一项是1,第二项也是1,从第三项开始,每项都是它前面两项之和。数列前面的一些项比较小,但增长速度很快,后面的项变得很大很大。

    Alice虽然才一岁一个月,但显然不是一个简单的小朋友,她很可能需要第100项,甚至第500项等等。

    嗯,这下就有点难度了吧。

    大哥哥、大姐姐们,你能编一个程序,输出Fibonacci数列的第n项给Alice进行研究吗?

    Input

    有多行,每行代表一个正整数n(1 ≤ n ≤ 1001)。

    Output

    对每个输入,输出Fibonacci数列的第n项。

    Sample Input

    1
    5
    6
    9
    101

    Sample Output

    1
    5
    8
    34
    573147844013817084101

    Hint

    亲,别说第1001项了,请看看样例中的第101项有多大吧。

    #include<stdio.h>
    #include<string.h>
    int a[10000],b[10000];
    ///b是主计算,a是辅助计算
    int main( )
    {
        int n;
        while(scanf("%d",&n)!=EOF)
        {
            memset(a,0,sizeof(a));
            memset(b,0,sizeof(b));
            b[1]=a[1]=1;
            int top=1;
            //表示主计算有了几位数
            for(int i=3 ; i<=n ; i++)
            {
                for(int j=1 ; j<=top ; j++)
                {
                    b[j]+=a[j];
                    a[j]=b[j]-a[j];
                }
                for(int j=1 ; j<top ; j++)
                {
                    if(b[j]>9)
                    {
                        b[j+1]+=b[j]/10;
                        b[j]%=10;
                    }
                }
                while(b[top]>9)
                {
                    b[top+1]=b[top]/10;
                    b[top]%=10;
                    top++;
                }
            }
            for(int i=top ; i>=1 ; i--)
            printf("%d",b[i]);
            puts("");
        }
    
        return 0;
    }
    View Code
  • 相关阅读:
    [剑指offer] 7. 斐波那契数列
    [剑指offer] 6. 旋转数组的最小数字
    [剑指offer] 5. 用两个栈实现队列
    [剑指offer] 4. 重建二叉树
    [剑指offer] 3. 从头到尾打印链表
    vue.js从输入中的contenteditable元素获取innerhtml
    CSS3 ------- object-fit属性
    mouseenter和mouseover区别
    元素scroll系列属性
    淘宝flexible.js源码分析
  • 原文地址:https://www.cnblogs.com/shuaihui520/p/9147883.html
Copyright © 2011-2022 走看看