首页 > 代码库 > POJ2389: 大数字乘法算法
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 }
POJ2389: 大数字乘法算法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。