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 }
版权声明:本文为博主原创文章,未经博主允许不得转载。