斐波那契+大数相加
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; }