一元多项式求和

题目要求

已知一元多项式:A(x)=a0+a1x+a2x2+a3x3+….anxn, B(x)= b0+b1x+b2x2+b3x3+….bmxm设计算法实现C(x)=A
(x)+B(x)。功能包括输入多项式A,输入多项式B,求A和B的和,显示求和后的结果等操作。本题中,链表的第
一个元素位置为1,链表的数据域包含coef和exp,其中coef为系数,exp为指数。
各个命令以及相关数据的输入格式如下:
输入多项式A:A,接下来的n行是要输入的多项式,每一行数据有两个值,
第一个值代表系数,第二个值代表指数,当第一个值为0时,多项式A输入结束
输入多项式B:B,接下来的n行是要输入的多项式,每一行数据有两个值,
第一个值代表系数,第二个值代表指数,当第一个值为0时,多项式B输入结束
求多项式A和B的和:任意键;
当输入的命令为E时,程序结束

整个代码

#include<iostream>
using namespace std;

class elem
{
public:
	elem(int m,int n)
	{
		coef=m;			//系数 
		exp=n;			//指数 
	}
	int coef;
	int exp;
	elem*next;			 
};

class Elem
{
public:
	Elem();					//构造函数 
	~Elem()					//析构函数 
	{
		elem*q=NULL;
		elem*p=first;
		while(p!=NULL)
		{
			q=p;
			p=p->next;
			delete q;
		}
	}
	elem*first;				//一元多项式单链表的头指针 
};

Elem::Elem()
{
	first=new elem(0,0);	//申请头结点 
	elem*r=first;			//尾插法建立单链表 
	int m;
	int n;
	cin>>m>>n; 				//输入第一项的系数和指数 
	while(m!=0)				//循环结束条件是系数为0 
	{
		elem*s=new elem(m,n);
		r->next=s;
		r=s;				//将结点s插入单链表尾部 
		cin>>m>>n;
	}
	r->next=NULL;
}

void mix(Elem&A,Elem&B)
{
    elem *a = A.first, *b = B.first;		//工作指针初始化 
    while(a && b)
    {
        if(a->exp < b->exp)					//第一种情况 
        {
            cout<<a->coef<<" "<<a->exp<<endl;
            a = a->next;
        }
        else if(a->exp > b->exp)			//第二种情况 
        {
            cout<<b->coef<<" "<<b->exp<<endl;
            b = b->next;
        }
        else								//第三种情况 
		{
            int tmp = a->coef + b->coef;
            if(tmp)
                cout<<tmp<<" "<<a->exp<<endl;
            a = a->next;
            b = b->next;
        }
    }
}

int main()
{
	char c;
	cin>>c;
	Elem A;
	cin>>c;
	Elem B;
	cin>>c;
	mix(A,B);
	cin>>c;
	return 0;
}

示例运行结果

在这里插入图片描述

结构分析

1、构造一元多项式,尾插法建立单链表,输入系数与指数,循环结束条件是系数为0。
2、一元多项式求和比较两多项式:若某两项指数相同,则将其系数相加,指数不变的输出。其他情况就是直接输出各自单独的系数指数。
主函数里面定义两个对象,构造两个一元多项式,然后运行框里面任意输入一个字符调用函数mix(Elem&A,Elem&B),完成求和的要求。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值