1. 程式人生 > 其它 >【尤拉計劃 25】1000位斐波那契數字

【尤拉計劃 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;
}