大數的階乘演算法

2021-07-01 20:16:43 字數 1304 閱讀 2540

用data陣列來存放階乘的每一位數字,首先令第一位的數值為1,位數為1,然後將每次相乘的乘積存回陣列,並迴圈處理每個陣列中超過10的數,若數值超過10,則需要進製,將位數加1,原來的數除以10,商數加前一位數的數值後存回前一位數的陣列中,再將餘數存回原來位數的陣列中。

例如求5!的值

步驟一:

1!=1

位數1陣列內容0      0      0      1

步驟二:

2!=2*1!=2

位數1陣列內容0      0      0      2

步驟三:

3!=3*2!=3*2=6

位數1陣列內容0      0      0      6

步驟四:

4!=4*3!=4*6=24

位數1陣列內容0      0      0      24

因為24大於10,需要進製

data[1]=data[1]+data[0]/10=0+2=2

data[0]=data[0]%10=4

所以陣列內容為0      0      2      4

位數2步驟五:

5!=5*4!=5*24=120

位數2陣列內容為0      0      2*5      4*5

即0      0      10      20

因為data[0]大於10,需要進製

data[1]=data[1]+data[0]/10=10+2=12

data[0]=data[1]%10=0

此時陣列內容為0      0      12      0

data[2]=data[2]+data[1]/10=0+1=1

data[1]=data[1]%10=2

位數加1

陣列內容為0      1      2      0

一次類推,可以計算大數的階乘,**如下:

#include #include #include #include #define max 100

void factorial(int n,char output)

; result[0] = 1;

for(i = 2; i <= n; i++) }

for(i = max - 1; i >= 0; i--) }

for(j = i; j >= 0; j--) }

int main()

; factorial(20,out);

printf("result:%s\n", out);

return 0;

}

大數階乘演算法

大數階乘演算法 前幾天朋友問我乙個問題 10000的階乘怎麼算?當時我就有點懵,10000 這個數字太大了,無論用什麼資料型別儲存結果都會溢位。這可怎麼辦呢?一時間束手無策。然後被一頓鄙視。後來經朋友的提醒,才恍然大悟,終於知道怎麼實現了,原來是使用陣列來模擬數字,這樣無論結果數字有多大,只要陣列的...

演算法 大數階乘

對於比較小的數n,可以通過遞迴或迴圈將計算結果儲存為整形。但是如果n很大的時候,比如1000,那麼n 肯定超出整形資料所能表示的範圍。因此必須採用其他方法解決。一般是採用陣列模擬。實現 如下 include include include define store step size 100 sta...

轉 大數階乘演算法

大數階乘演算法 大數階乘演算法 前幾天朋友問我乙個問題 10000的階乘怎麼算?當時我就有點懵,10000 這個數字太大了,無論用什麼資料型別儲存結果都會溢位。這可怎麼辦呢?一時間束手無策。然後被一頓鄙視。後來經朋友的提醒,才恍然大悟,終於知道怎麼實現了,原來是使用陣列來模擬數字,這樣無論結果數字有...