大數運算之階乘

2022-08-30 11:18:12 字數 2108 閱讀 6886

int 代表有符號整數,也就是說,用 int 宣告的變數可以是正數,可以是負數,也可以是零,但是只能是整數。標準規定 int 的最小取值範圍是 -32767 到 32767。

int 的取值範圍因機器而異,但是一定要大於或者等於 -32767 到 32767。一般來說,int 占用乙個字的記憶體空間。因此,字長為 16 位(bit)的舊式 ibm 相容機使用 16 位來儲存整型 int ,取值範圍是-32768 到 32767 。目前的個人電腦一般都是 32 位字長的,這些電腦中,int 一般也是 32 位的,取值範圍是 -2147483648 到 2147483647。對於使用 64 位 cpu 的電腦,使用更多位儲存 int 也是很自然的事情,取值範圍當然也會更大。

int:16位

-2^15  ~ 2^15-132位

-2^31  ~2^31-164位

-2^63  ~2^63-1

對於大數感覺長度還是不夠,大數動輒都是幾百位數,最近看到一段**,自己研究了一段時間,感覺c語言真是強大,再加上這次國慶去北京,了解到c語言其實從來都不像大家人為的那樣只是作為初級語言,入門語言供大家學習的,其實c語言的強大遠遠超出你我的想象。好吧,閒扯了一下。

#include#define n 1000

long a[8916]=,n,i,c,len;

int main(void)

for(len--,printf("%d",a[len--]); len>=0; len--)printf("%04d",a[len]);

return 0;

}

#include#define n 1000/* 最大到10555的階乘 */

long a[8816] = , n, i, c, len;

int main( void )

/* * for( len--,printf("for內:%d\n",a[len--]); len>=0; len--)

* */

for ( len--, printf( "%d", a[len--]); len >= 0; len-- )

printf( "%04d",a[len] );

/* %04d 4代表著一共有幾位,前面加0代表著輸出時不夠的位數用0填充 */

return(0);}

/* for (len=1;n>1; n--) //把len的長度初始為1,因為陣列中已經有乙個元素了a[0]=1

除錯**方便理解:自己切實執行一下,我就不貼啦。

自己動手會更加記憶深刻一些。

模擬乘法運算之N的階乘(大數階乘)

基於aoj 787和51nod 1057討論n的階乘問題。在這裡,討論的大數階乘的演算法主要是模擬乘法運算,我們用乙個乘數和另乙個乘數各位相乘,則該乘積的個位為結果的一位,該乘積的高位均為進製。需要注意的是,各位乘完後,進製可能是個多位數,則該多位數可以直接輸出。我們可以設定乙個陣列w k 來儲存乘...

藍橋杯 階乘運算 大數階乘

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

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

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