簡體   English   中英

C ++多項式乘法

[英]C++ Polynomial Multplication

我正在嘗試在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;
    };

現在,我想做的是使用此加法函數將兩個輸入多項式相乘,並且我覺得我可以使用科恩經典代數的下列文獻來作一些充分的思考。

科恩經典代數參考

我認為這應該可以滿足您的需求。 如果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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM