問題:
計算整數n的階乘,要求計算的結果最長可以到50位!(50位十進位制而不是二進位制)。
先上**,然後分析:
解析:主要是通過陣列的思想來做。因為階乘太大,一般的資料型別是放不下的!所以可以用陣列來做,陣列每個元素都在0~9之間,陣列的乙個元素表示一位!比如:
data[9] = 2;
data[8] = 3;
data[7] = 4;
data[6] = 6;
data[5] = 8;
data[4] = 3;
data[3] = 1;
data[2] = 3;
data[1] = 0;
data[0] = 2;
那麼這個數就可以表示為:2346831302~~~
我們只需要把這個陣列按順序printf出來即可,不需要再進行合成。只是在計算的時候,如果這個陣列裡面的元素大於9,就應該將其進製!
總結:
1. 一般在32位機上,double型別佔64位,一般能表示20位十進位制。
2. 在最開始程式設計的時候,將return的位置寫錯了,囧,所以計算完1的階乘就退出了。
3. 編寫的程式都是參考《經典c面試 真題精講》裡面的,雖然裡面有很多文字上的錯誤,不過還是一本很好的書。
階乘計算 大數計算
輸入乙個正整數n,輸出n 的值。其中n 123 n。演算法描述 n 可能很大,而計算機能表示的整數範圍有限,需要使用高精度計算的方法。使用乙個陣列a來表示乙個大整數a,a 0 表示a的個位,a 1 表示a的十位,依次類推。將a乘以乙個整數k變為將陣列a的每乙個元素都乘以k,請注意處理相應的進製。首先...
大數階乘的計算(一)
整數n的階乘指 1 2 3 n 1 n 的值,在n 171時,計算機一般會出錯 溢位 本文採用字串模擬數字乘法運算,使計算10000!成為可能 function multi byval x as string,byval y as string as string multi of two huge...
精度計算 大數階乘
本演算法的目的在於計算乙個比較大的數的階乘,由於得到的結果比較大,是現有的資料型別無法儲存的,所以我決定將結果儲存在乙個long a陣列中。我們的思路是把每4位數看做陣列的乙個元素來儲存,例如 個 十 百 千存在a 0 萬 十萬 百萬 千萬存在a 1 以此類推。我們用10的階乘來模擬一下求結果大於4...