poj2389-Bull Math(大整數乘法),poj2389-bullmath
一,題意:
大整數乘法模板題
二,思路:
1,模擬乘法(注意"逢十進一")
2,倒序輸出(注意首位0不輸出)
三,步驟:
如:555 x 35 = 19425
5 5 5 5 5 5
x 3 5 x 3 5
----------- ==> ----------
2 7 7 5 25 25 25
+ 1 6 6 5 +15 15 15
------------- -----------------
1 9 4 2 5 15 40 40 25
逢十進一
---------------
1 9 4 2 5
1 #include<iostream>
2 #include<cstring>
3 using namespace std;
4 const int N = 10010;
5 char a[N],b[N];
6 int ans[N]; //記錄結果的數組
7 int digit; //記錄結果的位數
8
9 //模擬乘法的過程
10 void MUL(int len , int len2){
11 int l = 0 ;
12 for(int i = len2 - 1 ; i >= 0 ; i--){
13 int k = l ;
14 int m = l ;
15 for(int j = len - 1 ; j >= 0 ; j--){
16 ans[k++] = (b[i]-'0')*(a[j]-'0') + ans[m++]; //儲存的時候為倒序
17 }
18 l++; //乘完一位,往後移一位相加
19 digit=k; //記錄位數
20 }
21 //進行"逢十進一"操作
22 for(int i = 0 ; i<=digit ; i++){
23 if(ans[i]>=10){
24 ans[i+1] = ans[i+1] + ans[i] / 10 ;
25 ans[i] %=10 ;
26 }
27 }
28 }
29
30 //輸出操作
31 void print(){
32 if(ans[digit]!=0) //判斷首位是否為0
33 cout<<ans[digit];
34 for(int i = digit-1 ; i>=0 ; i-- ){ //倒序輸出
35 cout<<ans[i];
36 }
37 cout<<endl;
38 }
39
40 int main(){
41 while(cin>>a>>b){
42 int len = strlen(a);
43 int len2 = strlen(b);
44 memset(ans,0,sizeof(ans));//初始化ans[]為0
45 MUL(len,len2);
46 print();
47 }
48 return 0;
49 }
View Code
版權聲明:本文為博主原創文章,未經博主允許不得轉載。