高精度乘法函数模板

#include <iostream>
#include <vector>

using namespace std;

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

    for (int i = len1 - 1; i >= 0; --i) {
        for (int j = len2 - 1; j >= 0; --j) {
            int mul = num1[i] * num2[j];
            int p1 = i + j, p2 = i + j + 1;
            int sum = mul + result[p2];

            result[p2] = sum % 10;  // 个位数存储到 p2 位置
            result[p1] += sum / 10; // 进位存储到 p1 位置
        }
    }

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

    return result;
}

// 输出结果函数
void printResult(const vector<int>& result) {
    for (int i : result) {
        cout << i;
    }
    cout << endl;
}

 

这个模板实现了一个高精度乘法函数 multiply,可以计算任意长度的两个非负整数的乘积。它使用了倒序存储的向量来表示大整数,并采用竖式乘法的思想进行计算。

模板中的 multiply 函数接受两个参数 num1num2,分别表示两个乘数,并返回它们的乘积。函数内部使用两个嵌套的循环遍历乘数,并将计算结果存储在向量 result 中。最后,去除 result 中的前导零,并返回最终的结果。

printResult 函数用于输出结果。

在示例用法部分,我们通过标准输入获取两个乘数的值,并将它们转化为倒序存储的向量形式。然后调用 multiply 函数计算乘积,并使用 printResult 函数输出结果。

posted @ 2023-06-29 18:28  fognight  阅读(66)  评论(0)    收藏  举报