斐波那契數列公升級版 大數相加

2021-10-01 09:43:20 字數 1595 閱讀 3861

求fibonacci數列的第n項f[n]. f[0]=1; f[1]=1 ; f[n]=f[n-1]+f[n-2];

輸入乙個不超過10000的正整數n。

輸出fibonacci數列的第n項的值。

由於是最大到第9999項,顯然不能用傳統的整型資料型別去遞迴相加。

那就要定義陣列對斐波那契數列的每一項進行模擬加法求和, 來得到結果。

先放上實現的**

#include

#include

#include

using

namespace std;

const

int n=

5005

;int

main()

, f1[n]=;

//初始化陣列,第乙個元素為字元1,其他為空字元

char

*p1,

*p2;

int n,temp,c,j,x=

0,maxlen,minlen,i;

cin>>n;

//第n項

for(i=

1;i)else

//進行模擬加法

for(j=

0;j) p1[j]

=c+48;}

while

(*p1!=0)

//把p1還原到陣列的首位址

if(n%

2) p1=f1;

else p1=f0;

i=x-1;

while

(p1[i]

=='0'

)for

(;i>=

0;i--

)return0;

}

使用字元陣列進行資料儲存,比起整型陣列來說記憶體占用少。進行模擬除法,定義為整型陣列並沒有太大用處。

陣列f0用於儲存計算斐波那契數列的偶數項以及第0項;陣列f1用於儲存計算奇數項

if語句用於不斷變換將被重新整理的陣列。計算偶數項時,要被重新整理的是陣列f0,奇數項時是f1。以達到用兩個陣列來重複進行加法。maxlen 和 minlen被隨之更改,因為對於每一次要被重新整理的陣列(p1),它儲存的值是前一項的值,p2儲存的則是上一項的值,那麼p1指向的陣列的長度一定小於p2指向的陣列。

temp計算時要減掉48,把字元數字通過ascii值 轉化為十進位制的數值。

最大要求到第9999項。我寫的時候先定義了const int n=255。後來不斷增大n的值除錯結果不為亂碼。n=5000時,9900也可以得到正確結果,再測試發現5001就可以了。我就強迫症地給加到5005了。

P2626 斐波那契數列(公升級版)

請你求出第nn個斐波那契數列的數mod 或 2 231之後的值。並把它分解質因數。n把第nn個斐波那契數列的數分解質因數。輸入 1複製 5輸出 1複製 5 5輸入 2複製 6輸出 2複製 8 2 2 2n le 48n 48 include include include include inclu...

P2626 斐波那契數列(公升級版)

請你求出第nn個斐波那契數列的數mod 或 2 231之後的值。並把它分解質因數。輸入格式 n輸出格式 把第nn個斐波那契數列的數分解質因數。輸入樣例 1 複製5 輸出樣例 1 複製5 5 輸入樣例 2 複製6 輸出樣例 2 複製8 2 2 2 n le 48n 48 includeusing na...

斐波那契數列 斐波那契數列python實現

斐波那契數列 fibonacci sequence 又稱 分割數列 因數學家列昂納多 斐波那契 leonardoda fibonacci 以兔子繁殖為例子而引入,故又稱為 兔子數列 指的是這樣乙個數列 1 1 2 3 5 8 13 21 34 在數學上,斐波納契數列以如下被以遞推的方法定義 f 1 ...