9.高精度乘法

 

不用保证A>=B

大数乘小数

这里是把小数b当成一个整体来乘。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 vector<int> mul(vector<int> &A, int b) {
 4     vector<int> C;
 5     int t = 0; //最开始的进位是0 
 6     for (int i = 0; i < A.size() || t; i++) { //要么i没循环完,要么t不为0
 7         if (i < A.size()) {
 8             t += A[i] * b; //相乘再加上上一位的进位
 9         } 
10         C.push_back(t % 10); //当前这一位的结果 
11         t /= 10; //进位
12         //加法模板里,t不是0就是1
13         //乘法模板里,t就有很多情况了 
14     }
15     while (C.size() > 1 && C.back() == 0) {
16         C.pop_back();
17     }
18     return C;
19 }
20 int main() {
21     string a; //a很长 
22     int b; //b很短 
23     cin >> a >> b;
24     vector<int> A, C;
25     for (int i = a.length() - 1; i >= 0; i--) {
26         A.push_back(a[i] - '0');
27     }
28     C = mul(A, b);
29     for (int i = C.size() - 1; i >= 0; i--) {
30         cout << C[i];
31     }
32     return 0;
33 }

大数乘以大数

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 vector<int> mul(vector<int> &A, vector<int> &B) {
 4     vector<int> C(A.size() + B.size());
 5     for (int i = 0; i < A.size(); i++) {
 6         for (int j = 0; j < B.size(); j++) {
 7             C[i + j] += A[i] * B[j];
 8         }
 9     }
10     int t = 0;
11     for (int i = 0; i < C.size(); i++) {
12         t += C[i];
13         C[i] = t % 10;
14         t /= 10;
15     }
16     while (C.size() > 1 && C.back() == 0) {
17         C.pop_back();
18     }
19     return C;
20 }
21 int main() {
22     string a, b;
23     cin >> a >> b;
24     vector<int> A, B, C;
25     for (int i = a.size() - 1; i >= 0; i--) {
26         A.push_back(a[i] - '0');
27     }
28     for (int i = b.size() - 1; i >= 0; i--) {
29         B.push_back(b[i] - '0');
30     }
31     C = mul(A, B);
32     for (int i = C.size() - 1; i >= 0; i--) {
33         cout << C[i];
34     }
35     return 0;
36 }

猜你喜欢

转载自www.cnblogs.com/fx1998/p/12817303.html
今日推荐