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

2021-07-15 02:14:15 字數 1358 閱讀 4848

基於aoj 787和51nod 1057討論n的階乘問題。

在這裡,討論的大數階乘的演算法主要是模擬乘法運算,我們用乙個乘數和另乙個乘數各位相乘,則該乘積的個位為結果的一位,該乘積的高位均為進製。需要注意的是,各位乘完後,進製可能是個多位數,則該多位數可以直接輸出。我們可以設定乙個陣列w[k],來儲存乘數和乘積(二者共用)。

模板如下:

while(迴圈條件)

a=w[k]*p+m;

w[k]=a%10;

m=a/10;

}aoj787:

c. 階乘中找數

time limit: 1000 ms   case time limit: 1000 ms   memory limit: 64 mb

total submission: 16   submission accepted: 10

description

問題描述:統計n階乘中數字p的個數

input

多組資料,每組資料只有一行,為兩個正整數n,p (n<=800,0<=p<=9)

output

輸出為兩行,一行為n!, 另一行為n! 中數字p的個數

sample input

original

transformed

10 8
sample output

original

transformed

3628800

2

ac**:

#include int main()

while(m>0)

}s=0;

for(i=k;i>=0;i--)

printf("\n%d\n",s);

}return 0;

}

1057 n的階乘

輸入n求n的階乘的準確值。

input

輸入n(1 <= n <= 10000)
output

輸出n的階乘
input示例

5
output示例

120
該題的n給到了10000,若按照原有方式模擬必然超時,因此需要優化。優化方式是將大數切段儲存,具體切成幾位一段可隨意,題主在ac時切成5位一段。

ac**:

#include int main()

if(m>0)

}printf("%d",w[k]);

for(i=k-1;i>=0;i--)

printf("%05d",w[i]);

printf("\n");

}return 0;

}

N的階乘 大數運算

題目位址 description given an integer n 0 n 10000 your task is to calculate n one n in one line,process to the end of file.for each n,output n in one line...

N的階乘 大數階乘

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

大數運算之階乘

int 代表有符號整數,也就是說,用 int 宣告的變數可以是正數,可以是負數,也可以是零,但是只能是整數。標準規定 int 的最小取值範圍是 32767 到 32767。int 的取值範圍因機器而異,但是一定要大於或者等於 32767 到 32767。一般來說,int 占用乙個字的記憶體空間。因此...