请各位大佬帮帮忙

麻烦大佬们看一下,这是实现任意两个高次多项式的加法和乘法运算的源码,但是我这个算法实现不了系数的正负号加减和x^0不显示为0,类似这样,加法和乘法运算里都有问题,麻烦各位大佬帮帮忙,🎈🎈了

 

/*	多项式加法和乘法示例	*/
#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 循环针对两个链表迭代器都没有指到结尾的情形
             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.coef;
                            poly_list_result.push_back(t_temp);
							iter_first++; 
                            iter_second++;
                        }
                }
                //该 for 循环针对第一个多项式的迭代器没有指到结尾
                //第二个指到结尾的情形
                for(;iter_first != poly_list_first.end();iter_first++)
                {
                    poly_list_result.push_back(*iter_first);
                }
                 //该 for 循环针对第二个多项式的迭代器没有指到结尾
                 //第一个指到结尾的情形
                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<<"请输入第一个多项式的项数:"<<endl;
            cin>>n;      
            cout<<"按降幂输入第一个多项式的每一项的系数和指数:";
            cout<<endl;  
			for(int i=1;i<=n;i++)
            {
                term  t_temp; 
				cout<<"请输入第 "<<i <<" 项系数和指数 ,以'enter'为界: ";
                cout<<endl;
                cin>>t_temp.coef;
                cin>>t_temp.exp;
                m_poly_list_first.push_back(t_temp);
            }
            n = 0;
            cout<<"请输入第二个多项式的项数:"<<endl;
            cin>>n;
            cout<<"按降幂输入第二个多项式的每一项的系数和指数:";
            cout<<endl;
            for(int j=1;j<=n;j++)
            {
                term t_temp;
                cout<<"请输入第 "<<j <<" 项系数和指数,以 'enter'为界:";
                cout<<endl;
                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_first.begin();	//输出多项式的每一项
            cout<<"第一个多项式为:";
            for(;iter!=m_poly_list_first.end();)
            { 
			    term t_temp=*iter; 
                cout<<t_temp.coef<<"x^"<<t_temp.exp; 
                if(++iter!=m_poly_list_result.end())
                cout<<"+";
            }
            cout<<endl;
            list<term>::iterator iterl = m_poly_list_second.begin();  //输出第二个多项式的每一项
			cout<<"第二个多项式为:";
			for(;iterl!=m_poly_list_second.end();) 
			{
				term t_temp = *iterl;
				cout<<t_temp.coef<<"x^"<<t_temp.exp;
				if(++iterl!=m_poly_list_result.end())
				cout<<"+";
			}
			cout<<endl;
        }
        void Poly_output_result()
        {
        	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<<"+";
			}
		}
//加法函数,其基本思想同上边的私有成员函数Poly_add();
//此处不带参数,多项式运算对象为私有数据成员
        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_add();
                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_output();        //输出要运算的多项式 
cout<<endl;
poly_a.Poly_add();	//多项式加法
cout<<"多项式加法的运算结果:";
poly_a.Poly_output_result();      //输出多项式相加结果 
poly_a.Poly_multi();	//多项式乘法
cout<<"多项式乘法的运算结果:"; 
poly_a.Poly_output_result();        //输出多项式相乘结果
system("pause"); 
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值