高精度乘法是大数运算中比较复杂的一部分。下面是一个使用字符串来实现高精度乘法的函数。这个函数会将两个大数相乘,返回结果也是一个大数。 复制#include <iostream>
#include <string>
#include <vector>
// 高精度乘法函数
std::string bigIntegerMultiply(const std::string& num1, const std::string& num2) {
std::vector<int> result(num1.size() + num2.size(), 0);
std::string resultStr;
// 反转字符串
std::string num1_reversed = num1;
std::string num2_reversed = num2;
std::reverse(num1_reversed.begin(), num1_reversed.end());
std::reverse(num2_reversed.begin(), num2_reversed.end());
// 逐位相乘
for (size_t i = 0; i < num1_reversed.size(); ++i) {
for (size_t j = 0; j < num2_reversed.size(); ++j) {
int mul = (num1_reversed[i] - '0') * (num2_reversed[j] - '0');
int sum = mul + result[i + j];
// 处理进位
result[i + j] = sum % 10;
int carry = sum / 10;
if (i + j + 1 < result.size()) {
result[i + j + 1] += carry;
}
}
}
// 将结果转换为字符串
for (int digit : result) {
if (!resultStr.empty() || digit != 0) { // 跳过前导零
resultStr.push_back(digit + '0');
}
}
// 如果结果字符串为空,返回"0"
if (resultStr.empty()) {
resultStr = "0";
}
return resultStr;
}
int main() {
std::string num1 = "123456789";
std::string num2 = "987654321";
std::string product = bigIntegerMultiply(num1, num2);
std::cout << "Product: " << product << std::endl;
return 0;
}
这个函数bigIntegerMultiply 接受两个字符串类型的大整数作为参数,首先将它们反转,然后逐位相乘。 在乘法过程中,我们使用一个整数向量result 来存储中间结果,每一位的乘积都加上前一位的进位。最后,我们将结果向量转换为字符串,并跳过前导零。 请注意,这个函数没有进行任何优化,对于非常大的数,效率可能不是最优的。 在实际应用中,可能需要考虑更高效的算法或使用专门的库,如Karatsuba算法或FFT(快速傅里叶变换)方法来进行大数乘法。
(责任编辑:admin) |