求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 ...