這是一道簡單的數學題,求乙個數(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...