以此类为基础,添加多项式乘法,该怎么实现,
以此类为基础,添加多项式乘法,该如何实现,紧急求助啊~
下面已经给出了一个用链表实现的多项式类加法功能,请问该如何为其添加多项式乘法功能,要求用重载乘号实现
我知道如何遍历相乘得到结果,但不知道该如何存储并将其返回该调用函数,求大神能帮帮我,给一个思路也可以,谢谢大家了
#include<iostream>
using namespace std;
class Term
{
private:
int coef;
int exp;
Term *link;
friend ostream &operator<<(ostream &, const Term &);
friend class Polynominal;
public:
Term(int c, int e);
Term(int c, int e, Term* next);
Term* InsertAfter(int c, int e);
};
Term::Term(int c, int e) :coef(c), exp(e)
{
link = 0;
}
Term::Term(int c, int e, Term* next) : coef(c), exp(e)
{
link = next;
}
Term* Term::InsertAfter(int c, int e)
{
link = new Term(c,e,link);
return link;
}
ostream &operator <<(ostream & out, const Term& val)
{
if (val.coef == 0) return out;
out << val.coef;
switch (val.exp)
{
case 0:break;
case 1:out << "X"; break;
default:out << "X^" << val.exp; break;
}
return out;
}
class Polynominal
{
private:
Term* theList;
friend ostream & operator <<(ostream &, const Polynominal &);
friend istream & operator >>(istream&, Polynominal &);
friend Polynominal& operator +(Polynominal &, Polynominal &);
friend Polynominal& operator *(Polynominal &, Polynominal &);
public:
Polynominal();
~Polynominal();
void AddTerms(istream& in);
void Output(ostream& out) const;
void PolyAdd(Polynominal &r);
Term* PolyMult(Polynominal &r);
};
Polynominal::Polynominal()
{
theList = new Term(0, -1);
theList->link = theList;
}
Polynominal::~Polynominal()
{
Term* p = theList->link;
while (p != theList)
{
theList->link = p->link;
delete p;
p = theList->link;
}
delete theList;
}
void Polynominal::AddTerms(istream & in)
{
Term* q = theList;
int c, e;
for (;;)
{
cout << "Input a term(coef,exp):\n" << endl;
cin >> c >> e;
if (e < 0) break;
q = q->InsertAfter(c, e);
}
}
void Polynominal::Output(ostream& out) const
{
int first = 1;
Term *p = theList->link;
cout << "The polynominal is:\n" << endl;
for (; p!=theList; p = p->link)
{
if (!first && (p -> coef > 0))
out << "+";
first = 0;
out << *p;
}
cout << "\n" << endl;
}
void Polynominal::PolyAdd(Polynominal& r)
{
Term* q, *q1 = theList, *p;
p = r.theList->link;
q = q1->link;
while (p->exp >= 0)
{
while (p->exp < q->exp)
{
q1 = q;
q = q->link;
}
if (p->exp == q->exp)
{
q->coef = q->coef + p->coef;
if (q->coef == 0)
{
q1->link = q->link;
delete (q);
q = q1->link;
}
else
{
q1 = q;
q = q->link;
}
}
else
q1 = q1->InsertAfter(p -> coef, p->exp);
p = p->link;
}
}
ostream& operator <<(ostream &out, const Polynominal &x)
{
x.Output(out);
return out;
}
istream& operator >>(istream& in, Polynominal &x)
{
x.AddTerms(in);
return in;
}
Polynominal& operator +(Polynominal &a, Polynominal &b)
{
a.PolyAdd(b);
return a;
}
------解决思路----------------------
1,声明新的多项式链表C保存结果;
2,声明新的多项式链表ptr保存零时乘积;
3,多项式A的每一项分别与多项式相乘并用ptr保存结果;
4,将ptr的值与链表C做加法运算;
5,重复3操作,直到到达多项式尾结束;
6,返回链表C的指针。
下面已经给出了一个用链表实现的多项式类加法功能,请问该如何为其添加多项式乘法功能,要求用重载乘号实现
我知道如何遍历相乘得到结果,但不知道该如何存储并将其返回该调用函数,求大神能帮帮我,给一个思路也可以,谢谢大家了
#include<iostream>
using namespace std;
class Term
{
private:
int coef;
int exp;
Term *link;
friend ostream &operator<<(ostream &, const Term &);
friend class Polynominal;
public:
Term(int c, int e);
Term(int c, int e, Term* next);
Term* InsertAfter(int c, int e);
};
Term::Term(int c, int e) :coef(c), exp(e)
{
link = 0;
}
Term::Term(int c, int e, Term* next) : coef(c), exp(e)
{
link = next;
}
Term* Term::InsertAfter(int c, int e)
{
link = new Term(c,e,link);
return link;
}
ostream &operator <<(ostream & out, const Term& val)
{
if (val.coef == 0) return out;
out << val.coef;
switch (val.exp)
{
case 0:break;
case 1:out << "X"; break;
default:out << "X^" << val.exp; break;
}
return out;
}
class Polynominal
{
private:
Term* theList;
friend ostream & operator <<(ostream &, const Polynominal &);
friend istream & operator >>(istream&, Polynominal &);
friend Polynominal& operator +(Polynominal &, Polynominal &);
friend Polynominal& operator *(Polynominal &, Polynominal &);
public:
Polynominal();
~Polynominal();
void AddTerms(istream& in);
void Output(ostream& out) const;
void PolyAdd(Polynominal &r);
Term* PolyMult(Polynominal &r);
};
Polynominal::Polynominal()
{
theList = new Term(0, -1);
theList->link = theList;
}
Polynominal::~Polynominal()
{
Term* p = theList->link;
while (p != theList)
{
theList->link = p->link;
delete p;
p = theList->link;
}
delete theList;
}
void Polynominal::AddTerms(istream & in)
{
Term* q = theList;
int c, e;
for (;;)
{
cout << "Input a term(coef,exp):\n" << endl;
cin >> c >> e;
if (e < 0) break;
q = q->InsertAfter(c, e);
}
}
void Polynominal::Output(ostream& out) const
{
int first = 1;
Term *p = theList->link;
cout << "The polynominal is:\n" << endl;
for (; p!=theList; p = p->link)
{
if (!first && (p -> coef > 0))
out << "+";
first = 0;
out << *p;
}
cout << "\n" << endl;
}
void Polynominal::PolyAdd(Polynominal& r)
{
Term* q, *q1 = theList, *p;
p = r.theList->link;
q = q1->link;
while (p->exp >= 0)
{
while (p->exp < q->exp)
{
q1 = q;
q = q->link;
}
if (p->exp == q->exp)
{
q->coef = q->coef + p->coef;
if (q->coef == 0)
{
q1->link = q->link;
delete (q);
q = q1->link;
}
else
{
q1 = q;
q = q->link;
}
}
else
q1 = q1->InsertAfter(p -> coef, p->exp);
p = p->link;
}
}
ostream& operator <<(ostream &out, const Polynominal &x)
{
x.Output(out);
return out;
}
istream& operator >>(istream& in, Polynominal &x)
{
x.AddTerms(in);
return in;
}
Polynominal& operator +(Polynominal &a, Polynominal &b)
{
a.PolyAdd(b);
return a;
}
------解决思路----------------------
1,声明新的多项式链表C保存结果;
2,声明新的多项式链表ptr保存零时乘积;
3,多项式A的每一项分别与多项式相乘并用ptr保存结果;
4,将ptr的值与链表C做加法运算;
5,重复3操作,直到到达多项式尾结束;
6,返回链表C的指针。