多项式乘法

C++ Polynomial Multplication

本文关键字:多项式      更新时间:2023-10-16

我正在尝试用c++将两个多项式相乘。如果可能的话,我希望保持这段代码的总体结构不变。我知道可能有个"更快的办法"下面是我的多项式加法代码:

    Polynomial Add(Polynomial &poly1, Polynomial &poly2)
    {
      vector<int> temp1;
      if( poly1.Degree() > poly2.Degree() )
      {
        for( int i = 0 ; i<poly2.Degree() ; i++ )
        {
          temp1[i]=poly1.Coefficient(i)+poly2.Coefficient(i);
        }
        Polynomial temp0(temp1);
        return temp0;
      }
      else if ( poly1.Degree() < poly2.Degree() )
      {
        for( int i = 0 ; i<poly1.Degree() ; i++ )
        {
          temp1[i]=poly1.Coefficient(i)+poly2.Coefficient(i);
        }
        Polynomial temp0(temp1);
        return temp0;
      }
    }
下面是Degree()成员函数的定义:
      int Polynomial::Degree() const
    {
      for(int i = 0; i < coefficient.size(); i++)
      {
        int last=0;
        if(coefficient[i] != 0)
        {
          last = i;
        }
        return last;
      }
    }
下面是我的多项式类声明:
    class Polynomial {
    public:
      Polynomial();
      Polynomial(vector<int> &coeffs);
      int Degree() const;
      int Coefficient(int k) const;
      void print() const;
      void constantMultiply(int x);
      void Transform();
      int nonzero() const;
    private:
      vector<int> coefficient;
    };

现在,我要做的是用这个加法函数把两个输入多项式相乘,我觉得我可以用科恩的经典代数中的以下文献来做这个戏法,经过一些充分的思考。

COHN经典代数参考

我认为这应该做你正在寻找的。如果poly1有i度系数,那么我们迭代poly2的系数。poly2的每个系数相乘,结果将是i+j度,如x^1*x^2=x^(1+2)=x^3。

Polynomial Mul(Polynomial &poly1, Polynomial &poly2)
{
  vector<int> temp1;
  for( int i = 0; i<poly1.Degree() ; i++ ){
    if(poly1.Coefficient[i] != 0){
      for( int j = 0; j<poly2.Degree() ; j++ ){
        if(poly2.Coefficient[j] != 0){
          temp1[i+j] = poly1.Coefficient(i)*poly2.Coefficient(j);
        }
      }
    }
  }
  Polynomial temp0(temp1);
  return temp0;
}

如果我遗漏了问题,或者如果这不能解决你的问题,请让我知道!

你的temp[i]不能工作。我检查过了。你需要做push_back或其他类似的操作来填充它。如果你已经知道更大的多项式的大小,它将工作。

像这样:

int how_big;
if(poly1.Degree()>poly2.Degree())
{
    how_big = poly1.Degree()+1;
}
else
{
    how_big = poly2.Degree()+1;
}