大數的階乘

2021-06-22 04:47:20 字數 1042 閱讀 3602

首先定義乙個足夠長的陣列。

拿10000的階乘為例,最後的結果長度是35660位,所以我們定義乙個40000個成員的陣列就可以了。

int result[40000];

其核心思想就是把計算結果每一位上的數字儲存到乙個陣列成員中,例如:

把124儲存至陣列中,儲存結果應該是

result[0] 4

result[1] 2

result[2] 1

這樣肯定是沒有問題的,乙個int型資料存放乙個小於10的數是絕對不會溢位。但是處理起來就稍微有點麻煩。

把整個陣列看成乙個數字,這個數字和乙個數相乘的時候,需要每一位都和這個乘數進行相乘運算還需要把前一為的進製加上。運算方法和小學數學是一樣的,乘積的個位是當前位上應該表示的數字,10位以上的需要進製。因為乘數不可能大於10000,所以乘數和乙個小於10的書相乘的時候不會大於100000,再加上前一位的進製用乙個int型資料來保持這個結果就沒有問題。寫法如下:

int 結果 = result[x] * 乘數 + 進製;

每一位的計算結果有了,把這個結果的個位數拿出來放到這個陣列元素上:

result[x] = 結果%10;

接下來的工作就是計算出進製:

進製 = 結果 / 10;

這樣一位一位的把整個陣列計算一遍,最後可能還有進製,用同樣的方法,把進製的數值拆成單個數字,放到相應的陣列元素中。

最後輸出一下結果,從最高位吧數字列印一遍就ok了

**如下:

#include #define max 500000  //結果最大可儲存的數的位數

using namespace std;

void factorial (int n,int ans)

while (carry)

} for (int i=digit;i>=1;i--) //從高位到低位輸出結果

cout << ans[i-1];

cout << endl;

}int main ()

return 0;

}

N的階乘 大數階乘

輸入n求n的階乘的準確值。input 輸入n 1 n 10000 output 輸出n的階乘 首先,要確定n的階乘的數字大概有多少位,這樣便於我們去選擇合適的演算法。階乘 當n 10000時,上式值為35660 已經向上取整 所以接受 include include include include ...

大數的階乘

include include 乙個陣列元素表示4 個十進位制位,即陣列是萬進製的 define bigint radix 10000 define radix len 4 10000 有35660 位 define max len 35660 radix len 1 整數的最大位數 int x m...

大數的階乘

首先要確定這個數的階乘需要開多大的陣列,可以用stirling公式。輸入不超過10000的正整數,計算n 的具體值。include include using namespace std const int maxn 50000 int main for k maxn k 0 k if f k 0 ...