#include <iostream>
#include <vector>
#include <stdlib.h>
using namespace std;
const int N = 1e6 + 10;
string a, b;
vector<int> A, B, C(2 * N);
int lenc; //最后保存的数组 C 的长度
void mul(vector<int> &A, vector<int> &B)
{
lenc = A.size() + B.size(); //因为是从1开始的 所以lenc 的长度就是A+B 的长度
for (int i = 1; i < A.size(); i++)
{
for (int j = 1; j < B.size(); j++)
{
C[i + j - 1] += A[i] * B[j];
C[i + j] += C[i + j - 1] / 10;
C[i + j - 1] %= 10;
}
}
while (lenc > 0 && C[lenc] == 0) //删除前导零
lenc--;
for (int i = lenc; i > 0; i--)
printf("%d", C[i]);
}
int main()
{
cin >> a >> b; //第一步输入
for (int i = a.size(); i >= 0; i--) //第二步倒着 转换 成数字
A.push_back(a[i] - '0'); //注意 vector A , B 不要第 0 位数字与第16行[i + j - 1] 想呼应
for (int i = b.size(); i >= 0; i--)
B.push_back(b[i] - '0');
mul(A, B);
system("pause");
return 0;
}
差不多就是 一个模板记住会写就行。我解释里面也有写不懂可以看一下
用 vector 主要因为范围可以搞得很大而不报错,但比较占空间,如果对空间有要求也可以像我代码中给数组上范围,
主要是注意位置的对应关系,就是一个竖式的乘法然后进位取余什么的操作。
可以点点赞嘛 ~