大數的階層(N )

2021-07-29 07:10:32 字數 931 閱讀 2723

對於大數來說,乙個數的階乘是非常大的,同樣,乙個int型別的整數,他的階乘就有可能會很大。

就拿50來說,他的階乘位數是65位,就已經

遠遠超過了long long int型別的最大值

。這時候,我們要通過

字串的方法,來進行階乘的運算。

當然,需要注意的是:

我們所求乙個數的階乘,這個數是在int範圍內的,5000的階乘位數是16326位。

其方法是:

首先,我們是可以先求一定範圍內的最大值的階乘位數,以便於申請陣列空間的確定。

對於大數問題,我們要有將大數與陣列結合的思想,可以利用類似於人工求值的方法求出有關大數的問題。

對於大數階乘來說,最重要的是如何將每個數的每位數與相對應的陣列元素儲存起來,就如算50的階乘,我們要先從1開始乘:

1*2=2,將2存到a[0]中,

接下來是用a[0]*3;

2*3=6,將6儲存在a[0]中,

接下來是用a[0]*4;

6*4=24,是兩位數,那麼24%10==4存到a[0]中,24/10==2存到a[1]中,

接下來是用a[0]*5;a[1]*5+num(如果前一位相乘結果位數是兩位數,那麼num就等於十位上的那個數字;如果是一位數,num==0)

24*5=120,是三位數,那麼120%10==0存到a[0]中,120/10%10==2存到a[1]中,120/100==1存到a[2]中,

接下來是用a[0]*3;a[1]*6+num;a[2]*6+num;

120*6=720,那麼720%10==0存到a[0]中,720/10%10==2存到a[1]中,720/100==7存到a[2]中,

...................

直到乘到50,將每一位數儲存為止。

#include int main()  

C 計算大資料階層

這是上大學時老師出的乙個問題,當時沒做出來。c 中,用普通的資料型別精確計算超過20的階乘應該是不可能的。下面通過陣列實現任意500以內的階乘,如果計算更大的數,也可以實現,不過時間要久一些。以下是程式 include using namespace std const int max 10000 ...

求n的階層末尾0的個數

統計n的階層的末尾0的個數 思路 1 設 n!k 10 m,且k不能被10整除,那麼n!末尾有 m個0 2 再考慮對n!進行質因數分解,n!2 x 3 y 5 z 因為 10 2 5,所以 m 只跟 x 和 z 有關,每一對2和5得到乙個10 於是m min x,z 不難看出x顯然大於z,因為能被2...

大數n的階乘

求算n 對於比較小的n,求其階乘的時候可以用遞迴解決。但是如果n很大的時候,比如1000,那麼n 肯定超出整形資料所能表示的範圍。因此必須採用其它方法解決,通常解決大數運算資料超出範圍的問題時採用陣列去模擬。其實求算n 可以看成是每次兩個整數相乘的過程,因此可以模擬成大數相乘的過程。只是需要增加一些...