實現大數階乘加法 大數階乘以及超大數輸出的實現

2021-10-14 16:21:29 字數 1290 閱讀 4914

近期碰到個求大數階乘的題目,大意如下

原題來自pat基礎函式題

起初未考慮輸出超大數問題,直接printf輸出結果,但當數增大到一定程度後就無法正常輸出這才認識到到%d輸出範圍有限(中間還從%d到%ld,再到%lld做了努力。。。)。

查詢下資料發現超大數問題可以通過字元形式輸出結果,下面分享下我的示例

#include void print_factorial(const int n);

int main()

int result[3000]; //儲存計算結果

int num[3000]; //儲存臨時資料

void print_factorial(const int n) //階乘函式

if (carry != 0)

}int z = 0;

for (int n = num_index-1; n >=0; n--)//該迴圈用來倒排兩個陣列

乘法規則:將乘數與被乘數的低位到高位依次相乘,加上每位計算的進製數,依次得到每一位的結果。

程式模擬時,無論乘數有多少位,都將乘數看成乙個整體,與低位相乘加上該位的進製數得到臨時變數,取臨時變數的最後一位得到我們需要的一位(%10),除去最低位後的數作為下一位的餘數(carrry = temp/10)。被乘數每一位乘完之後,如果餘數不為0,將其依次放入結果中。

示例:234*12

先計算12*4=48,得temp=48+0=48

留下8,進製數為4

接著計算12*3=36,得temp=36+4=40

留下0,進製數為4

繼續計算12*2=24,得temp=24+4=28

留下8,進製數為2

最後被乘數乘完,進製數為2,直接放置。

得到的結果為2808。

由於乘得的結果低位先確定高位後確定,而陣列也是低位先確定高位後確定,故將得到的臨時結果低位放到陣列的低位,得到臨時結果陣列num。最後倒排得到最終的結果陣列result。

實現大數階乘加法 1006 笨階乘

通常,正整數 n 的階乘是所有小於或等於 n 的正整數的乘積。例如,factorial 10 10 9 8 7 6 5 4 3 2 1。相反,我們設計了乙個笨階乘 clumsy 在整數的遞減序列中,我們以乙個固定順序的操作符序列來依次替換原有的乘法操作符 乘法 除法 加法 和減法 例如,clumsy...

階乘之和 大數乘法和大數加法

時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 題目描述 用高精度計算出s 1!2!3!n!n 50 其中 表示階乘,例如 5!54321。輸入正整數n 輸出計算結果s 輸入 3輸出 9利用數學方式計算大數。牛客...

N的階乘 大數階乘

輸入n求n的階乘的準確值。input 輸入n 1 n 10000 output 輸出n的階乘 首先,要確定n的階乘的數字大概有多少位,這樣便於我們去選擇合適的演算法。階乘 當n 10000時,上式值為35660 已經向上取整 所以接受 include include include include ...