原題位址:
首先定義乙個足夠長的陣列。
拿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...