码迷,mamicode.com
首页 > 编程语言 > 详细

POJ2389: 大数字乘法算法

时间:2014-12-26 11:10:16      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:

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

 

POJ2389: 大数字乘法算法

标签:

原文地址:http://www.cnblogs.com/fu11211129/p/4186212.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!