帮我生成 大数乘法 的代码c++
时间: 2024-03-05 14:51:19 浏览: 24
以下是一个简单的实现大数乘法的 C++ 代码:
```c++
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
vector<int> multiply(vector<int>& num1, vector<int>& num2) {
int n1 = num1.size(), n2 = num2.size();
vector<int> res(n1 + n2, 0);
for (int i = n1 - 1; i >= 0; i--) {
for (int j = n2 - 1; j >= 0; j--) {
int mul = num1[i] * num2[j];
int p1 = i + j, p2 = i + j + 1;
int sum = mul + res[p2];
res[p2] = sum % 10;
res[p1] += sum / 10;
}
}
while (res.size() > 1 && res.back() == 0) {
res.pop_back();
}
return res;
}
int main() {
string s1, s2;
cin >> s1 >> s2;
vector<int> num1(s1.size()), num2(s2.size());
for (int i = 0; i < s1.size(); i++) {
num1[i] = s1[i] - '0';
}
for (int i = 0; i < s2.size(); i++) {
num2[i] = s2[i] - '0';
}
reverse(num1.begin(), num1.end());
reverse(num2.begin(), num2.end());
vector<int> res = multiply(num1, num2);
reverse(res.begin(), res.end());
for (int i = 0; i < res.size(); i++) {
cout << res[i];
}
cout << endl;
return 0;
}
```
这段代码中,我们使用了 vector 来存储大数,并且从低位到高位进行计算。其中,multiply 函数接受两个大数的 vector,返回它们的乘积。在函数中,我们使用两个指针 i 和 j 分别指向两个数的末尾,然后从后往前遍历,依次计算每一位的乘积,并将结果加到 res 数组中。最后,我们再去掉 res 数组中的前导零,然后将结果翻转后输出即可。
需要注意的是,这里的大数应该以字符串的形式输入,然后转换为 vector<int>。因为在输入过程中,如果使用 int 或者 long long 类型来存储,已经超过这些类型的范围时,就无法正确地读入这些数。