您的位置:首页 > 编程语言 > C语言/C++

多项式的加法与乘法(C++实现)

2008-10-30 18:19 417 查看
.h文件:

class term
{//多项式的项
public:
int coef;//多项式的系数
int exp;//多项式的指数
term(int c=0,int e=0):coef(c),exp(e){};
};

class PolyArith
{//多项式类,实现多项式的加法和乘法
private:
list<term> m_poly_list_first;//存储第一个多项式
list<term> m_poly_list_second;//存储第二个多项式
list<term> m_poly_list_result;//存储运算结果
list<term> Poly_Add(list<term>& poly_list_first,list<term>& poly_list_second);//私有成员函数,供乘法调用
public:
PolyArith();
~PolyArith();
void Poly_input();//多项式的输入函数
void Poly_output();//多项式的输出函数
void Poly_add();//多形式加法函数
void Poly_multi();//多项式乘法
};

.cpp:

PolyArith::PolyArith()
{
}

list<term> PolyArith::Poly_Add(list<term>& poly_list_first,list<term>& poly_list_second)
{
list<term> poly_list_result;
list<term>::iterator iter_first=poly_list_first.begin();
list<term>::iterator iter_second=poly_list_second.begin();
while((iter_first!=poly_list_first.end())&&(iter_second!=poly_list_second.end()))
{
term t_tmp;
term t_first=(term)*iter_first;
term t_second=(term)*iter_second;
if(t_first.exp>t_second.exp)
{
poly_list_result.push_back(t_first);
iter_first++;
}
else if(t_second.exp>t_first.exp)
{
poly_list_result.push_back(t_second);
iter_second++;
}
else
{
t_tmp.coef=t_first.coef+t_second.coef;
if(t_tmp.coef!=0)
{
t_tmp.exp=t_first.exp;
poly_list_result.push_back(t_tmp);
}
iter_first++;
iter_second++;
}
}
for(;iter_first!=poly_list_first.end();iter_first++)
poly_list_result.push_back(*iter_first);
for(;iter_second!=poly_list_second.end();iter_second++)
poly_list_result.push_back(*iter_second);
return poly_list_result;
}

void PolyArith::Poly_input()
{
//输入函数,用于输入多项式
int n;
cout<<"请输入第一个多项式的项数:";
cin>>n;
cout<<"按降幂输入第一个多项式的每一项的系数和指数:"<<endl;
for(int i=1;i<=n;i++)
{
term t_tmp;
cout<<"请输入第"<<i<<"项系数和指数;"<<endl;
cin>>t_tmp.coef;
cin>>t_tmp.exp;
m_poly_list_first.push_back(t_tmp);
}
n=0;
cout<<"请输入第二个多项式的项数:";
cin>>n;
cout<<"按降幂输入第二个多项式的每一项的系数和指数:"<<endl;
for(int j=1;j<=n;j++)
{
term t_tmp;
cout<<"请输入第"<<j<<"项系数和指数;"<<endl;
cin>>t_tmp.coef;
cin>>t_tmp.exp;
m_poly_list_second.push_back(t_tmp);
}
}

void PolyArith::Poly_output()
{

list<term>::iterator iter=m_poly_list_first.begin();
cout<<"第一个多项式是:"<<endl;
for(;iter!=m_poly_list_first.end();)
{
term t_tmp=*iter;
cout<<t_tmp.coef<<"x^"<<t_tmp.exp;
if(++iter!=m_poly_list_first.end())
cout<<"+";
}
cout<<endl;
iter=m_poly_list_second.begin();
cout<<"第二个多项式是:"<<endl;
for(;iter!=m_poly_list_second.end();)
{
term t_tmp=*iter;
cout<<t_tmp.coef<<"x^"<<t_tmp.exp;
if(++iter!=m_poly_list_second.end())
cout<<"+";
}
cout<<endl;
iter=m_poly_list_result.begin();
cout<<"结果是:"<<endl;
for(;iter!=m_poly_list_result.end();)
{
term t_tmp=*iter;
cout<<t_tmp.coef<<"x^"<<t_tmp.exp;
if(++iter!=m_poly_list_result.end())
cout<<"+";
}
cout<<endl;
}

void PolyArith::Poly_add()
{
list<term>::iterator iter_first=m_poly_list_first.begin();
list<term>::iterator iter_second=m_poly_list_second.begin();
while((iter_first!=m_poly_list_first.end())&&(iter_second!=m_poly_list_second.end()))
{
term t_tmp;
term t_first=(term)*iter_first;
term t_second=(term)*iter_second;
if(t_first.exp>t_second.exp)
{
m_poly_list_result.push_back(t_first);
iter_first++;
}
else if(t_second.exp>t_first.exp)
{
m_poly_list_result.push_back(t_second);
iter_second++;
}
else
{
t_tmp.coef=t_first.coef+t_second.coef;
if(t_tmp.coef!=0)
{
t_tmp.exp=t_first.exp;
m_poly_list_result.push_back(t_tmp);
}
iter_first++;
iter_second++;
}
}
for(;iter_first!=m_poly_list_first.end();iter_first++)
m_poly_list_result.push_back(*iter_first);
for(;iter_second!=m_poly_list_second.end();iter_second++)
m_poly_list_result.push_back(*iter_second);
}

void PolyArith::Poly_multi()
{
list<term> poly_list_result;
list<term>::iterator iter_first=m_poly_list_first.begin();
for(;iter_first!=m_poly_list_first.end();iter_first++)
{
list<term> poly_list_tmp;
list<term>::iterator iter_second=m_poly_list_second.begin();
for(;iter_second!=m_poly_list_second.end();iter_second++)
{
term t_tmp;
term t_first=(term)*iter_first;
term t_second=(term)*iter_second;
t_tmp.coef=t_first.coef*t_second.coef;
t_tmp.exp=t_first.exp+t_second.exp;
poly_list_tmp.push_back(t_tmp);
}
poly_list_result=Poly_Add(poly_list_tmp,poly_list_result);
}
m_poly_list_result=poly_list_result;
}

PolyArith::~PolyArith()
{
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: