C ++多项式乘法

时间:2013-05-03 03:01:14

标签: c++ function

我试图在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经典代数的下面的文献来做一些充分的思考。

COHN'S CLASSIC ALGEBRA REFERENCE

2 个答案:

答案 0 :(得分: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;
}

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

答案 1 :(得分:0)

您的temp[i]将无效。我检查了。您需要执行push_back或某些此类操作来填充它。如果您已经知道较大多项式的大小,它将起作用。

这样的事情:

int how_big;

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