演算法題目1 大數的階乘

2021-09-28 17:18:43 字數 1463 閱讀 2127

這個問題是乙個朋友聊天的時候突然聊到,在計算c語言中如何計算大數的階乘。

10!在c語言完全沒問題,但是如果是100!1000!的話如何實現。當時我不加思索給出下的**:

//大數的階乘 100! 錯誤

#define _crt_secure_no_warnings

#include

#include

#include

intmain()

printf

("%d!=%d"

,n,factorial)

;system

("pause");

return0;

}

我輸入小數時,結果是沒有問題的,但是當我計算100!的時候,發現100!居然是0.這個時候我意識到是不是100!超過我設定的資料型別的範圍。但是我發現在c語言中並沒有乙個資料型別可以容納100!那麼如何解決這個問題了。

#define     _crt_secure_no_warnings

#include

#include

#include

void

factorial

(int n,

char

*pout)

int arr[

256]

;int idx =1;

arr[0]

=1;//此處要注意 i從1開始

for(

int i =

1; i <= n; i++

)//如果進製大於10 要降級

while

(cry >10)

//進製到這裡如果還大於 0 證明位數要加1

if(cry >0)

arr[idx++

]= cry;

}//將陣列倒序賦值給字串

for(

int i = idx -

1; i >=

0; i--

)*pout =

'\0'

;return;}

intmain()

;int n =0;

printf

("input n:");

scanf

("%d"

,&n)

;factorial

(n, buff)

;puts

(buff)

;return0;

}

演算法分析:

100 !=

100∗99∗

98∗..

.∗

1100!=100*99*98*...*1

100!=1

00∗9

9∗98

∗...

∗1這個型別於小學計算的乘法高位等於低位的本身×被乘數加低位的進製。這個時候本身就是對得到的數求餘數,進製就是對除運算。

大數運算 7 大數階乘 求階乘

對於大數來說,乙個數的階乘是非常大的,同樣,乙個int型別的整數,他的階乘就有可能會很大。就拿50來說,他的階乘位數是65位,就已經遠遠超過了long long int型別的最大值。這時候,我們要通過字串的方法,來進行階乘的運算。當然,需要注意的是 我們所求乙個數的階乘,這個數是在int範圍內的,5...

NYOJ 28 大數階乘

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

nyoj 28 大數階乘

就是個簡單的高精度,只是一開始我打表超記憶體了,然後用了各種技巧硬是把記憶體縮到了題目要求以下 5w kb 感覺挺爽的,如下 1 include2 include3 include4 include5 using namespace std 6 typedef long long ll 7 cons...