杭電ACM 1042 大數階乘 N

2021-06-22 12:22:05 字數 884 閱讀 4262

原題位址:

首先定義乙個足夠長的陣列。

拿10000的階乘為例,最後的結果長度是35660位,所以我們定義乙個40000個成員的陣列就可以了。

int result[40000];

其核心思想就是把計算結果每一位上的數字儲存到乙個陣列成員中,例如:

把124儲存至陣列中,儲存結果應該是

result[0] 4

result[1] 2

result[2] 1

這樣肯定是沒有問題的,乙個int型資料存放乙個小於10的數是絕對不會溢位。但是處理起來就稍微有點麻煩。

把整個陣列看成乙個數字,這個數字和乙個數相乘的時候,需要每一位都和這個乘數進行相乘運算還需要把前一位的進製加上。運算方法和小學數學乘法一樣,乘積的個位是當前位上應該表示的數字,10位以上的需要進製。因為乘數不可能大於10000,所以乘數和乙個小於10的書相乘的時候不會大於100000,再加上前一位的進製用乙個int型資料來保持這個結果就沒有問題。寫法如下:

int 結果 = result[x] * 乘數 + 進製;

每一位的計算結果有了,把這個結果的個位數拿出來放到這個陣列元素上:

result[x] = 結果%10;

接下來的工作就是計算出進製:

進製 = 結果 / 10;

這樣一位一位的把整個陣列計算一遍,最後可能還有進製,用同樣的方法,把進製的數值拆成單個數字,放到相應的陣列元素中。

#include using namespace std;

int main()

while(carry)

} for(int k=digit; k>=1; --k)

cout<

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

杭電acm1002 大數加法

原理就是模仿小學的數學加法 因為我們要從個位開始加起 所以需要先倒置儲存 使前面為低位,先進行運算 直接上 include include int n,c 1000 d 1000 sum 1000 char a 1001 b 1001 intmain for j 0 j 倒置儲存 int maxle...

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