【题目描述】
求两个不超过200位的非负整数的积。
【输入】
有两行,每行是一个不超过200位的非负整数,没有多余的前导0。
【输出】
一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
【输入样例】
12345678900
98765432100
【输出样例】
1219326311126352690000
这道题不是简单的高*低,而是高*高。具体为什么可以看输入样例,明显这两个数字都是高精
代码如下
#include <bits/stdc++.h>
using namespace std;
// 函数名称:mul
// 函数参数:两个vector<int>
// 函数返回值:一个vector<int>
// 函数功能:返回输入的两个vector的积
// 中文名称:高精度乘法
vector <int> mul(vector <int> &A, vector <int> &B) {
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];
C[i + j + 1] += C[i + j] / 10;
C[i + j] %= 10;
}
}
while (C.size() > 1 && C.back() == 0) C.pop_back();
return C;
}
// 应用部分
vector <int> A,B,C;
string CA,CB; // 字符串存储
int main(){
cin >> CA >> CB;
for (int i = CA.size() - 1;i >= 0;i--) A.push_back(CA[i] - '0');
for (int i = CB.size() - 1;i >= 0;i--) B.push_back(CB[i] - '0');
C = mul(A,B);
for (int i = C.size() - 1;i >= 0;i--) cout << C[i];
cout << endl;
return 0;
}
此代码仅供参考,请勿纯抄