#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
std::string bigIntMultiply(const std::string &a, const std::string &b) {
int lenA = a.length(), lenB = b.length();
std::vector<int> result(lenA + lenB, 0);
// 小学乘法,逐位乘然后加到结果数组中
for (int i = lenA - 1; i >= 0; i--) {
for (int j = lenB - 1; j >= 0; j--) {
result[i + j + 1] += (a[i] - '0') * (b[j] - '0');
}
}
// 处理进位
for (int i = lenA + lenB - 1; i > 0; i--) {
result[i - 1] += result[i] / 10;
result[i] %= 10;
}
// 转换结果为字符串
std::string resStr = "";
for (auto num : result) {
resStr += std::to_string(num);
}
// 去掉开头的0
return resStr.erase(0, std::min(resStr.find_first_not_of('0'), resStr.size() - 1));
}
int main() {
std::string a, b;
std::cout << "Enter first number: ";
std::cin >> a;
std::cout << "Enter second number: ";
std::cin >> b;
std::cout << "Multiplication result: " << bigIntMultiply(a, b) << std::endl;
return 0;
}
该代码首先初始化一个结果数组,长度为两个输入字符串的长度之和。它遍历输入字符串的每一位,进行乘法运算,并将结果加到相应的位置上。然后处理进位,并将最后的数组转换为字符串。此代码可能对于超长数字不是很高效,但对于学习和基本的应用来说是足够的。如果需要处理非常大的数字或需要非常高的性能,则应考虑使用更高效的算法。
Karatsuba 算法和 FFT (Fast Fourier Transform) 可以更快。