0

我试图在 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's Classic Algebra 中的以下文献来做一些足够的思考。

科恩的经典代数参考

4

2 回答 2

1

我认为这应该做你正在寻找的。如果 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;
}

如果我错过了这个问题,或者这不能为您解决问题,请告诉我!

于 2013-05-03T04:03:02.423 回答
0

你的temp[i]行不通。我检查了。你需要做push_back一些这样的操作来填充它。如果您已经知道较大多项式的大小,它将起作用。

像这样的东西:

int how_big;

if(poly1.Degree()>poly2.Degree())
{
    how_big = poly1.Degree()+1;
}
else
{
    how_big = poly2.Degree()+1;
}
于 2013-05-03T04:16:25.737 回答