当前位置:首页 C++ > 正文

C++高精度乘法运算

作者:野牛程序员:2023-08-31 10:26:40 C++阅读 2786

使用C++进行高精度乘法运算时,您可以实现一个函数来执行所需的操作。以下是一个示例代码,演示了如何进行高精度的乘法运算:

#include <iostream>
#include <vector>

// 函数用于将字符串表示的数字转换为整数数组
std::vector<int> stringToVector(const std::string& numStr) {
    std::vector<int> numVec;
    for (char c : numStr) {
        numVec.push_back(c - '0');
    }
    std::reverse(numVec.begin(), numVec.end());  // 反转,个位在前
    return numVec;
}

// 函数用于将整数数组转换为字符串表示的数字
std::string vectorToString(const std::vector<int>& numVec) {
    std::string numStr;
    for (int digit : numVec) {
        numStr += (char)(digit + '0');
    }
    std::reverse(numStr.begin(), numStr.end());  // 反转,个位在后
    return numStr;
}

// 高精度乘法函数
std::vector<int> highPrecisionMultiply(const std::vector<int>& num1, const std::vector<int>& num2) {
    int len1 = num1.size();
    int len2 = num2.size();
    std::vector<int> result(len1 + len2, 0);

    for (int i = 0; i < len1; ++i) {
        for (int j = 0; j < len2; ++j) {
            result[i + j] += num1[i] * num2[j];
            result[i + j + 1] += result[i + j] / 10;
            result[i + j] %= 10;
        }
    }

    // 去除前导零
    while (result.size() > 1 && result.back() == 0) {
        result.pop_back();
    }

    return result;
}

int main() {
    std::string numStr1, numStr2;
    std::cout << "请输入两个需要相乘的数字:" << std::endl;
    std::cin >> numStr1 >> numStr2;

    std::vector<int> num1 = stringToVector(numStr1);
    std::vector<int> num2 = stringToVector(numStr2);

    std::vector<int> result = highPrecisionMultiply(num1, num2);
    std::string resultStr = vectorToString(result);

    std::cout << "乘积结果:" << resultStr << std::endl;

    return 0;
}

在这个示例代码中,首先定义了将字符串表示的数字转换为整数数组以及将整数数组转换为字符串表示的数字的辅助函数。然后定义了一个高精度乘法函数 highPrecisionMultiply,它实现了类似手算乘法的逻辑,将两个数的每一位相乘并累加到相应的位置上。最后,程序读取输入的两个数字,调用高精度乘法函数,然后输出结果。

请注意,这只是一个简单的示例,可能对于大型高精度计算来说还需要进行性能优化。


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击