0

我有一个Polynomial类,它有一个get_vect成员函数,它将整数存储在一个向量中,该向量将表示多项式的系数。现在,我正在尝试使用Multiply非成员函数将两个多项式相乘,但是当涉及到向量的实际乘法时,我陷入了困境。到目前为止,我所拥有的是如下所示:

Polynomial Multiply(const Polynomial & poly1, const Polynomial & poly2)
{
    vector<int> Poly1 = poly1.get_vect();
    vector<int> Poly2 = poly2.get_vect();
    vector<int> Poly3;

    if( Poly1.size() < Poly2.size() )
    {
        for(size_t i = 0 ; Poly2.size()-Poly1.size() ; ++i )
        {
            Poly2.push_back(0);
        }
    }
    else if( Poly1.size() > Poly2.size() )
    {
        for(size_t i = 0 ; Poly1.size()-Poly2.size() ; ++i )
        {
            Poly1.push_back(0);
        }
    }

    return Poly3;
}

我看到它必须遵循以下模式:

在此处输入图像描述

4

1 回答 1

3

好的,所以如果我正确理解了这个问题,您希望Poly3成为一个保存由和vector<int>表示的多项式之间的多项式乘法所产生的系数。Poly1Poly2

该请求中的默认值是所有三个多项式都是单个变量中的多项式,每个系数代表该变量的递增幂之前的系数。IE。{ 4, 5, 6, 7 }对应于 4 + 5x + 6x 2 + 7x 3

如果是这样,那么只要你的多项式不是非常大,实际的乘法就不应该那么困难。您需要看起来大致如下的代码:

    Poly3.resize(Poly1.size() + Poly2.size() - 1, 0);  // Make the output big enough; init to 0

    for (size_t i = 0; i != Poly1.size(); i++)
        for (size_t j = 0; j != Poly2.size(); j++)
            Poly3[i+j] += Poly1[i] * Poly2[j];

现在的结果Poly3应该是 和 的Poly1乘积Poly2

我完全有可能忘记了边缘条件;我会在这里观看评论以指出我在哪里做的。不过,与此同时,我做了一些测试,看来这给出了正确的输出。

如果您有相当大的多项式,那么您可能需要查看数学库来处理乘法。但是对于大约 20 到 30 个学期以下的任何内容?除非您的代码非常依赖此多项式评估,否则我怀疑这不会成为您的瓶颈。

于 2013-08-10T05:53:23.837 回答