【欧拉计划 25】1000位斐波那契数字
1000位斐波那契数
描述
斐波那契数列是按如下递归定义的数列:
F1=1
F2=1
Fn=Fn−1+Fn−2
因此斐波那契数列的前12项分别是:
F1=1
F2=1
F3=2
F4=3
F5=5
F6=8
F7=13
F8=21
F9=34
F10=55
F11=89
F12=144
第一个包含三位数字的是第12项F12。
在斐波那契数列中,第一个包含1000位数字的是第几项?
分析
使用高精度的方式来模拟,普通的斐波那契数列的递推:
a=b;b=c;c=a+b;
转换成高精度的形式即可。
#include<bits/stdc++.h>
using namespace std;
int a[1005],b[1005],c[1005];
int main(){
int cnt=3;
a[1]=1;b[1]=1;c[1]=2;
while(c[1000]==0){
//a=b
memcpy(a,b,sizeof(a));
//b=c
memcpy(b,c,sizeof(b));
//c=a+b
memcpy(c,a,sizeof(c));
for(int i=1;i<=1000;i++){
c[i]+=b[i];
if(c[i]>=10){
c[i+1]+=c[i]/10;c[i]%=10;
}
}
//for(int i=20;i>=1;i--)printf("%d",c[i]);
//system("pause");
++cnt;
}
cout<<cnt<<endl;
return 0;
}