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