poj2389-Bull Math(大整数乘法)

一,题意:
  大整数乘法模板题
二,思路:
  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

版权声明:本文为博主原创文章,未经博主允许不得转载。

 

posted @ 2015-10-08 13:33  My_Sunshine  阅读(550)  评论(0编辑  收藏  举报