【欧拉计划 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;
}
posted @ 2022-05-08 18:00  计算机知识杂谈  阅读(423)  评论(0编辑  收藏  举报