大數值階乘計算函式

2021-09-30 06:03:15 字數 545 閱讀 2905

階乘往往由於數值巨大而無法用乙個long int或者double型別資料儲存。近日無聊寫了個大數值階乘的計算函式,理論上只要記憶體足夠,能夠計算出任何數值的階乘,但實際上100萬以上的階乘計算不管是時間消耗還是記憶體消耗都是極為驚人的,建議使用該函式計算100萬以下的階乘。

為了有足夠的空間儲存結果,用乙個vector儲存,每個unsigned long int儲存8位結果,vector大小由結果位數決定。本程式主體主要包含兩個函式,階乘計算函式和結果顯示函式,定義在factorial.h中。

**如下:

測試**main.cpp:

經過測試,10萬的階乘計算時間為274489ms,即4分34秒。這個速度受電腦配置影響,這是在e5300,2g ddrii 800的硬體條件下測試出來的。

下面是測試結果圖:

小數階乘:

1000階乘:

下面是系統計算機計算1000!的階乘結果:

1萬大數階乘,耗時1529毫秒:

10萬大數階乘:

該函式計算階乘速度不算很快,還有很大的改進空間。

階乘計算 大數計算

輸入乙個正整數n,輸出n 的值。其中n 123 n。演算法描述 n 可能很大,而計算機能表示的整數範圍有限,需要使用高精度計算的方法。使用乙個陣列a來表示乙個大整數a,a 0 表示a的個位,a 1 表示a的十位,依次類推。將a乘以乙個整數k變為將陣列a的每乙個元素都乘以k,請注意處理相應的進製。首先...

計算大數的階乘

問題 計算整數n的階乘,要求計算的結果最長可以到50位!50位十進位制而不是二進位制 先上 然後分析 解析 主要是通過陣列的思想來做。因為階乘太大,一般的資料型別是放不下的!所以可以用陣列來做,陣列每個元素都在0 9之間,陣列的乙個元素表示一位!比如 data 9 2 data 8 3 data 7...

精度計算 大數階乘

本演算法的目的在於計算乙個比較大的數的階乘,由於得到的結果比較大,是現有的資料型別無法儲存的,所以我決定將結果儲存在乙個long a陣列中。我們的思路是把每4位數看做陣列的乙個元素來儲存,例如 個 十 百 千存在a 0 萬 十萬 百萬 千萬存在a 1 以此類推。我們用10的階乘來模擬一下求結果大於4...