HDU1042 N (大數運算)

2021-07-05 02:29:16 字數 760 閱讀 2268

題目鏈結

求 n 的階乘,階乘大家都會,這道題考的就是大數,因為 n 的取值達到了10000,那麼他的結果的位數就已經達到了上萬了。

所以就是模擬大數乘法,因為階乘時,乙個數很大,另乙個數是相對較小的,所以思路是比較簡單的。

具體的思路就是,以前計算乘法時是用乙個數的每一位去乘另乙個數,然後按照一定的規則進行相加。現在我們直接用小數去乘大數的每一位,進製的時候不再侷限是個位數,而是直接進製除 10 後的結果。

這樣的話,如果只進行 大數的位數次 乘法運算的話,第一位的數字經過累積就會非常大,所以每次計算時完成後,要將首位向前分解。

細節見**……

#include 

#include

#include

using

namespace

std;

int num[50000];

int main()

memset(num, 0, sizeof(num));

num[0] = 1;

len = 0;

for(i=2; i<=n; i++)

// 向前分解,直到首位為個位數

for(; ; j++)

num[j] = up%10;

up /= 10;}}

for(i=len; i>=0; i--) printf("%d", num[i]);

printf("\n");

}return

0;}

HDU 1042 N 大數乘法 C語言

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

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

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

大數階乘(萬進製)(HDU 1042)

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...