杭電1042 N!(大數乘法的應用!)

2021-06-10 06:13:52 字數 1030 閱讀 9831

problem description

given an integer n(0 ≤ n ≤ 10000), your task is to calculate n!

input

one n in one line, process to the end of file.

output

for each n, output n! in one line.

sample input

123

sample output

126

這道題目有一些東西特別要注意:

1.0的階乘是存在的!0!=1,我當初提交這道題目是在這一點上吃了不少的虧!我開始是是寫的while(cin>>n && n>0);交上去的時候老是報錯!但是我就納悶了,沒錯啊!後來才發現,這句應該寫成while(cin>>n && n>=0);或者while(scanf("%d",&n)!=eof);

2.10000的階乘是在是太大了!我的陣列開4000居然還是錯,開8000還錯!後來索性開個10000,居然對了!太吃驚!

//首先需要肯定,程式是正確的

//這算是大數乘除法!記住他們是如何處理的!由於資料很大,用基本資料型別根本無法滿足要求,只能用陣列來表示!

//大數乘法!10000!的階乘是在太大!幾次陣列開小了都報錯誤!

#include #include#includeusing namespace std;

#define max 10000

#define base 100000//base只是乙個基度,對最終取值並沒有影響,相反,base取值愈大,計算量愈小

//base發生改變的時候,下面的輸出也要相應地做出調整,否則也會輸出錯誤答案!除非當base取10!

int h[max];

//這是我第二次接觸大數的乘法!現在複習一下吧!很好的演算法!

int main()

for(j=0;j

杭電ACM 1042 大數階乘 N

原題位址 首先定義乙個足夠長的陣列。拿10000的階乘為例,最後的結果長度是35660位,所以我們定義乙個40000個成員的陣列就可以了。int result 40000 其核心思想就是把計算結果每一位上的數字儲存到乙個陣列成員中,例如 把124儲存至陣列中,儲存結果應該是 result 0 4 r...

杭電ACM 1042 N (還需再看)

problem description given an integer n 0 n 10000 your task is to calculate n input one n in one line,process to the end of file.output for each n,outp...

HDU 1042 N 大數乘法 C語言

這是一道簡單的數學題,求乙個數 n 的階乘。但是問題是題中n給的非常大 0 n 10000 用for迴圈來做顯然不行了。1.開闢乙個夠大的陣列,保證大於1000!所佔的位數,我是以最大情況來估算,即1000個1000相乘,開一百萬吧,反正我們老大 miyu 說了陣列空間爛便宜。2.然後就是挨個來乘了...