階乘的快取演算法

2021-09-25 19:27:20 字數 618 閱讀 8152

階乘一般都是用遞迴的方式,但是在重複使用階乘的場景,就需要使用快取了,這樣就能提公升很大效率了。如下:

#include #include #include #include using namespace std;

int n = 6;

int* cache = new int[n + 1];

// 1. 階乘方式

int factorial(int n)

// 2. 快取的階乘演算法

int factorial_cache(int num)

cache[0] = 1;

for (int i = 1; i < num; i++)

for_each(cache, cache + num, (int i)->void);

cout << endl;

return cache[n - 1];

}int main(int argc, char const *ar**)

結果:

f_val = 120

1 1 2 6 24 120

c_val = 120

快取:5的階乘快取 = 120

大數的階乘演算法

用data陣列來存放階乘的每一位數字,首先令第一位的數值為1,位數為1,然後將每次相乘的乘積存回陣列,並迴圈處理每個陣列中超過10的數,若數值超過10,則需要進製,將位數加1,原來的數除以10,商數加前一位數的數值後存回前一位數的陣列中,再將餘數存回原來位數的陣列中。例如求5!的值 步驟一 1!1 ...

大數階乘演算法

大數階乘演算法 前幾天朋友問我乙個問題 10000的階乘怎麼算?當時我就有點懵,10000 這個數字太大了,無論用什麼資料型別儲存結果都會溢位。這可怎麼辦呢?一時間束手無策。然後被一頓鄙視。後來經朋友的提醒,才恍然大悟,終於知道怎麼實現了,原來是使用陣列來模擬數字,這樣無論結果數字有多大,只要陣列的...

演算法訓練 階乘

問題描述 乙個整數n的階乘可以寫成n 它表示從1到n這n個整數的乘積。階乘的增長速度非常快,例如,13 就已經比較大了,已經無法存放在乙個整型變數中 而35 就更大了,它已經無法存放在乙個浮點型變數中。因此,當n比較大時,去計算n 是非常困難的。幸運的是,在本題中,我們的任務不是去計算n 而是去計算...