POJ2389: 大数字乘法算法

2014-12-26

大数字乘法算法一般是采用模拟"小学生乘法演算过程”方法。

主要算法思想:

  1. 乘数a第i)位与乘数b第j)位数字相乘,并将该乘积结果放到乘积结果数组product的第(i+j-1)位中;

  2. 检查product的第(i+j-1)位中储存的数字是否超过或等于10,若是,则“取余并且进位”。

细节参考代码:

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 void solve(string a,string b){
 5     int a_length=a.length();
 6     int b_length=b.length();
 7     int *arr_a=new int[a_length+1];
 8     int *arr_b=new int[b_length+1]; 
 9     
10     for(int i=1;i<=a_length;i++){
11         arr_a[i] = a[i-1]-'0';
12     }
13     for(int i=1;i<=b_length;i++){
14         arr_b[i] = b[i-1]-'0';
15     }
16     
17     int *product=new int[a_length+b_length];
18     int product_length = a_length+b_length-1;
19     for(int i=0;i<=product_length;i++) product[i]=0;
20      
21      for(int i=a_length;i>=1;i--){
22          
23          for(int j=b_length;j>=1;j--){
24              int temp = arr_a[i]*arr_b[j];
25              int c = product[i+j-1]+temp;
26              product[i+j-1] = c%10;
27              product[i+j-2] += c/10;
28          }
29      }
30      
31 
32     if(product[0]!=0) cout<<product[0];
33     for(int i=1;i<=product_length;i++){
34         cout<<product[i];
35     }cout<<endl;
36 }
37 int main(){
38     string a,b;
39     while(cin>>a>>b){
40         solve(a,b);
41     }
42     return 0;
43 }
View Code

 

posted @ 2014-12-26 10:39  流白  阅读(949)  评论(0编辑  收藏  举报