using namespace std;
class Term
{
private:
int m_iCoef;
int m_iExp;
public:
Term(int coef, int exp)
{
m_iCoef = coef;
m_iExp = exp;
}
int Getcof()
{
return m_iCoef;
}
int Getexp()
{
return m_iExp;
}
bool operator<(Term& t)
{
return m_iExp < t.Getexp();
}
};
ostream& operator<<(ostream& os, Term& ter)
{
os << ter.Getcof() << "x" << ter.Getexp() << endl;
return os;
}
typedef list<Term>LISTTERM;
class Ploy
{
private:
LISTTERM m_stlTerm;
public:
bool add(const Term& t)
{
m_stlTerm.push_back(t);
return true;
}
Ploy addPloy(Ploy& p)
{
Ploy result;
m_stlTerm.sort();
p.m_stlTerm.sort();
LISTTERM::iterator src = m_stlTerm.begin();
LISTTERM::iterator des = p.m_stlTerm.begin();
while ((src != m_stlTerm.end()) && (des != p.m_stlTerm.end()))
{
signed int coef;
signed int exp;
if ((*src).Getexp() == (*des).Getexp())
{
exp = (*src).Getexp();
coef = (*src).Getcof() + (*des).Getcof();
src++;
des++;
}
if ((*src).Getexp() < (*des).Getexp())
{
exp = (*src).Getexp();
coef = (*src).Getcof();
src++;
}
if ((*src).Getexp() > (*des).Getexp())
{
exp = (*des).Getexp();
coef = (*des).Getcof();
des++;
}
if (coef != 0)
{
Term t(coef, exp);
result.add(t);
}
}
if (src != m_stlTerm.end())
{
LISTTERM temp(src, m_stlTerm.end());
result.m_stlTerm.splice(result.m_stlTerm.end(), temp);
}
if (des != p.m_stlTerm.end())
{
LISTTERM temp(des,p.m_stlTerm.end());
result.m_stlTerm.splice(result.m_stlTerm.end(), temp);
}
return result;
}
void show()
{
LISTTERM::iterator it = m_stlTerm.begin();
for (; it != m_stlTerm.end(); it++)
{
cout << *it << endl;
}
}
};
int main()
{
Ploy p1;
Ploy p2;
Term t1(2, 6);
Term t2(3, 4);
Term t3(5, 2);
Term t4(6, 0);
p1.add(t1);
p1.add(t2);
p1.add(t3);
p1.add(t4);
Term t5(2, 5);
Term t6(-3, 4);
Term t7(5,2);
Term t8(8, 0);
p2.add(t5);
p2.add(t6);
p2.add(t7);
p2.add(t8);
Ploy p3=p1.addPloy(p2);
p3.show();
return 0;
}
多项式加减
最新推荐文章于 2022-01-09 18:15:46 发布