题目描述
给定两个正整数 A 和 B,请你计算 A×B 的值。
输入输出说明
输入说明
共两行,第一行包含整数 A,第二行包含整数 B。
输出说明
共一行,包含 A×B 的值。 1≤A,B的长度≤10000
题目样例
样例输入
2
3
Copy
样例输出
6
Copy
数据范围
-
对于 20% 的数据,满足 所有数字的十进制位数不大于9位
-
对于 50% 的数据,满足 所有数字的十进制位数不大于18位
-
对于 100% 的数据,满足 所有数字的十进制位数不大于10^4位
代码
//High precision A*B
#include <bits/stdc++.h>
using namespace std;
vector<int> mul(vector<int> A, vector<int> B) {
reverse(A.begin(), A.end());
reverse(B.begin(), B.end());
vector<int> C(A.size() + B.size(), 0);
for (int i = 0; i < A.size(); i++) {
for (int j = 0; j < B.size(); j++) {
C[i + j] += A[i] * B[j];
}
}
int x = 0;
for (int i = 0; i < C.size(); i++) {
x += C[i];
C[i] = x % 10;
x /= 10;
}
while (x > 0) {
C.push_back(x % 10);
x /= 10;
}
while (C.size() > 1 && C.back() == 0) C.pop_back();
reverse(C.begin(), C.end());
return C;
}
int main() {
string a, b;
vector<int> A, B, C;
cin >> a >> b;
for (auto c : a) A.push_back(c - '0');
for (auto c : b) B.push_back(c - '0');
C = mul(A, B);
for (auto t : C) cout << t;
return 0;
}