模拟两个大数乘法
关键代码:
for (int i = 0; i < A.size(); i ++ ) {
for (int j = 0; j < B.size(); j ++ ) {
mul[i + j] += (A[i] * B[j]);
}
}把结果存到 i + j 这个小规律比较关键
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const int N = 5000;
std::vector<int> A, B;
ll mul[N];
int main(){
//std::ios::sync_with_stdio(false);
//std::cin.tie(nullptr);
string a, b;
while(cin >> a >> b)
{
memset(mul, 0, sizeof mul);
A.clear();
B.clear();
for (int i = a.size() - 1; i >= 0; i -- ) A.push_back(a[i] - '0');
for (int i = b.size() - 1; i >= 0; i -- ) B.push_back(b[i] - '0');
for (int i = 0; i < A.size(); i ++ ) {
for (int j = 0; j < B.size(); j ++ ) {
mul[i + j] += (A[i] * B[j]);
}
}
for (int i = 0; i < 5000; i ++ ) {
mul[i + 1] += mul[i] / 10;
mul[i] = mul[i] % 10;
}
int j;
for (j = 5000; j > 0; j -- ) {
if(mul[j]) break;
}
for (j; j >= 0; j -- ) {
cout << mul[j];
}
cout << '\n';
}
return 0;
}