多项式相加
注意:使用链表
输入要求
首先输入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
当然还有很多很多很多的问题!!!!!!
第一版 能力倒着🤦♀️🤦♀️🤦♀️🤦♀️