【创】多项式相加#单链表啧啧

多项式相加

注意:使用链表

输入要求
首先输入2个整数m和n(0<m, n<=1000000000)分别代表2个多项式的项数。

然后,输入m+n行数据,前m行表示第一个多项式,后n行表示第二个多项式

每行1个整数c和一个非负整数e(e>=0),分别表示多项式每一项的系数和指数(指数按升序排列)。

样例输入:
3 4
1 1 2 3 3 5
1 0 -6 1 1 2 -3 5
输出:
x+2x3+3x5
1-6x+x2-3x5
1-5x+x2+2x3

样例输入:
3 3
0 0 0 1 0 -1
1 0 1 1 1 -1
输出:

1+x+x^-1
1+x+x^-1

输入:
1 1
1 1
1 1
输出:
x
x
2x

输出要求
输入的两个多项式和结果多项式,均按指数升序排列。

代码::

#include<stdio.h>
#include<stdlib.h>

typedef struct LinkListNode{
	int  coef;	 	//系数  x左边的 coefficient 
	int  index;       //指数 头上的
//	char symbol			//符号 系数的符号
	struct LinkListNode  *next;   //指针域
}LNode, *LinkList; 

void CreateList(LinkList &L, int n);

void PrintList(LinkList L);

void Merge(LinkList A, LinkList B, LinkList &C);

//void symbol(LinkList )

int main (){
	int m,n;
	LinkList lm;
	LinkList ln;
	scanf("%d %d",&m,&n);
	CreateList(lm, m);
	CreateList(ln, n);
	PrintList(lm);
	PrintList(ln);
	LinkList L;
	Merge(lm, ln, L);
	PrintList(L);
}

void CreateList(LinkList &L, int n){
	L = new LNode;//创建一个新的头结点【只有指针域没有数据域】
	LNode *p = L;//创建一个指向结点的指针p并使得p指向头结点
	while(n--){
		LNode *a = new LNode;//创建一个结点 用new 
		scanf("%d %d",&a->coef,&a->index);
		a->next = NULL;
		p->next = a;
		p = p->next;
	}
}

void symble (LNode *p){
	if(p->coef==0){
		if(p->next->coef > 0){
			printf("+");
		}
	}
	if(p->coef>0){
		printf("+");
	}
}

void PrintList(LinkList L){
	LNode *p = L->next;
//	int d = 1;
	while(p!=NULL){
		if(p->coef==0){
			p = p->next;
//			if(p!=NULL)
//				symble(p);
			continue;
		}
		if(p->index==0){
			if(p->coef>0)
				printf("1");
			else{
				printf("-1");
			}
			p = p->next;
			if(p!=NULL)
				symble(p);
			continue;
		}
		if(p->index==1){
			if(p->coef==1){
				printf("x");
			}
			else if(p->coef==-1){
				printf("-x");
			}
			else {
				printf("%dx",p->coef);
			}
		}
		else{
			if(p->coef==1){
				printf("x^%d",p->index);
			}
			else if(p->coef==-1){
				printf("-x^%d",p->index);
			}
			else {
				printf("%dx^%d",p->coef,p->index);
			}
			
		}	
		p = p->next;
		if(p!=NULL&&p->coef!=0)
			symble(p);
	}
	printf("\n");
}


void Merge(LinkList A, LinkList B, LinkList &C){
	LNode *pa = A->next;
	LNode *pb = B->next;
	C = new LNode;
	LNode *pc = C;
//	printf("dddd\n");
	while(pa!=NULL || pb!=NULL){
		LNode *elem = new LNode;
		if(pa==NULL){
			elem->coef = pb->coef;
			elem->index = pb->index;
//			elem = elem->next;
			pb = pb->next;
		}
		else if(pb==NULL){
			elem->coef = pa->coef;
			elem->index = pa->index;
//			elem = elem->next;
			pa = pa->next;
		}
		else if(pa->index == pb->index){
			elem->coef = pa->coef+pb->coef;
			elem->index = pa->index;
//			elem = pc->next;
			pa = pa->next;
			pb = pb->next;
		}
		else if(pa->index < pb->index){
			elem->coef = pa->coef;
			elem->index = pa->index;
//			elem = elem->next;
			pa = pa->next;
		}
		else if(pa->index > pb->index){
			elem->coef = pb->coef;
			elem->index = pb->index;
//			elem = elem->next;
			pb = pb->next;
		}
		elem->next = NULL;
		pc->next = elem;
		pc = elem;
//		printf("index=%d,coef=%d\n",pc->index,pc->coef);
	}
	LNode *p = C->next;
//	printf("gggg");
//	while(p!=NULL){
//		printf("index=%d,coef=%d\n",pc->index,pc->coef);
//		p = p->next;
//	}
}

但是!!!!!!!

3 3
0 0 1 0 -1 0
0 1 1 1 -1 1
崩溃输出!!!
1-1
x-x
1-1+x-x

当然还有很多很多很多的问题!!!!!!

第一版 能力倒着🤦‍♀️🤦‍♀️🤦‍♀️🤦‍♀️

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值