階乘一般都是用遞迴的方式,但是在重複使用階乘的場景,就需要使用快取了,這樣就能提公升很大效率了。如下:
結果:#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 而是去計算...