2010 3.21 情

     多项式的算法程序:

#include<list>
#include<iostream>
#include<cassert>

using namespace std;

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)
 {
  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_temp;
   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_temp.coef=t_first.coef+t_second.coef;
    t_temp.exp=t_first.exp;
    poly_list_result.push_back(t_temp);
    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;
 }
public:

 void Poly_input()
 {
  int n;
  cout<<"请输入第一个多项式的项数:";
  cin>>n;
  cout<<"按降幂输入第一个多项式的每一项的系数和指数:";
  cout<<endl;
  for(int i=1;i<=n;i++)
  {
   term t_temp;
   cout<<"请输入第"<< i <<"项系数和指数,以回车为界:";
   cout<<endl;
   cin>>t_temp.coef;
   cin>>t_temp.exp;
   m_poly_list_first.push_back(t_temp);
  }
  n=0; //重新初始化 n
  cout<<"请输入第二个多项式的项数:"<<endl;
  cin>>n;
  cout<<"按降幂输入第二个多项式的每一项的系数和指数:";
  cout<<endl;
  for(int j=1;j<=n;j++)
  {
   term t_temp;
   cout<<"请输入第"<< j <<"项系数和指数,以回车为界:";
   cin>>t_temp.coef;
   cin>>t_temp.exp;
   m_poly_list_second.push_back(t_temp);
  }
 }

 

 void Poly_output()
 {

  list<term>::iterator iter = m_poly_list_result.begin();

  for(;iter != m_poly_list_result.end();)
  {
   term t_temp=*iter;
   cout<<t_temp.coef<<"x^"<<t_temp.exp;
   if(++iter != m_poly_list_result.end())
    cout<<"+";
  }
  cout<<endl;
 }


 void 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_temp;
   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_temp.coef=t_first.coef+t_second.coef;
    t_temp.exp=t_first.exp;
    m_poly_list_result.push_back(t_temp);
    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 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_temp;                                //用以存储多项式的中间运算结果
   list<term>::iterator iter_second=m_poly_list_second.begin();
   for(;iter_second != m_poly_list_second.end();iter_second++)
   {
    term t_temp;                            //用以存储项的中间运算结果
    term t_first = (term)*iter_first;
    term t_second = (term)*iter_second;

    t_temp.coef = t_first.coef*t_second.coef;
    t_temp.exp = t_first.exp+t_second.exp;
    poly_list_temp.push_back(t_temp);
   }
   poly_list_result=Poly_add(poly_list_temp,poly_list_result);
  }
  m_poly_list_result = poly_list_result;
 }
};
int main()
{
 cout<<"**********本程序实现多项式的加法与乘法*********";
 cout<<endl;
 PolyArith poly_a;
 poly_a.Poly_input();
 poly_a.Poly_add();
 cout<<"多项式的加法运算结果:"<<endl;
 poly_a.Poly_output();
 cout<<endl;
 poly_a.Poly_multi();
 cout<<"多项式乘法运算结果:"<<endl;
 poly_a.Poly_output();
 system("pause");
 return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值