階乘往往由於數值巨大而無法用乙個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...