斐波那契+大数相加

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

 

posted @ 2018-06-06 22:53  shuai_hui  阅读(224)  评论(0编辑  收藏  举报