HDU 1042 N 大數乘法 C語言

2021-09-06 02:49:10 字數 730 閱讀 1466

這是一道簡單的數學題,求乙個數(n)的階乘。但是問題是題中n給的非常大(0<=n<=10000),用for迴圈來做顯然不行了。

1.開闢乙個夠大的陣列,保證大於1000!所佔的位數,我是以最大情況來估算,即1000個1000相乘,開一百萬吧,反正我們老大

(miyu)說了陣列空間爛便宜。

2.然後就是挨個來乘了(說白了,就是模擬我們平時的乘法),這裡不要慣性的只要看見某位過10便想著進製,雖然這樣能做,但

艱難。可以讓一位存大一點的數值,要知道,對於每一位來說,可以存下乙個21億的數字。

3.如果只是乘,不中途處理一次進製的話,那便永遠是在「個位」做乘法了,肯定不行,於是我們每乘2次處理一次進製(理由見

**注釋),這樣變可解決這個問題了。

**如下:

#include#include#include#include#define max 1000000 

int n,p,res[max+1];

int main()

}}

for(int i=0;i<=max;++i) //清除前置的零.

} for(int i=p;i<=max;++i)

printf("%d",res[i]);

puts("");

} //system("pause");

return 0;

}

提交用了875ms,努力努力。

HDU1042 N (大數運算)

題目鏈結 求 n 的階乘,階乘大家都會,這道題考的就是大數,因為 n 的取值達到了10000,那麼他的結果的位數就已經達到了上萬了。所以就是模擬大數乘法,因為階乘時,乙個數很大,另乙個數是相對較小的,所以思路是比較簡單的。具體的思路就是,以前計算乘法時是用乙個數的每一位去乘另乙個數,然後按照一定的規...

HDU 1042 N 大數與小數相乘的乘法模擬

本題大意 給定乙個10000以內的整數n,讓你求出n 並輸出。本題思路 先初始化乙個存放答案的陣列ans,初始ans 0 1,並初始化其剩下的元素為0,接著就從2開始依次與ans陣列內的每乙個數相乘,具體乘法過程見 需要注意的就是求divisor時自身此時的值也是需要加上的,還有就是注意當存在餘數並...

hdu1042(大數乘法 )

計算n!1 n 10000 在去南昌icpc邀請賽之前,勳宇帶著我們做過大數的題,剛好也是這個題。而我影響最深刻的就是運用到萬進製,顧名思義,以一萬為進製,因為n!是個很大的數,所以只能用陣列去存。需要注意的是列印時,倒敘且 04d,不足的用零去補。附上 include include void f...