题目来源:Wejudge#3988
题目
首先输入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+2x^3+3x^5 1-6x+x^2-3x^5 1-5x+x^2+2x^3
代码
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode{
int coef,index; //数据域
struct LNode *next; //指针域
}LNode,*LinkList;
void create(LinkList &ll,int n);
void add(LinkList l1,LinkList l2,LinkList &L);
void print(LinkList L);
int main(){
int n,m;
while(~scanf("%d %d", &n , &m)){
LinkList l1,l2,l3;
create(l1, n);
create(l2, m);
add(l1,l2,l3);
print(l1);
print(l2);
print(l3);
}
return 0;
}
void create(LinkList &ll,int n)
{
ll=new LNode;
LNode *l=ll;
int a,b;
while(n--)
{
scanf("%d %d",&a,&b);
if(a==0)continue;
l->next=new LNode;
l=l->next;
l->coef=a,l->index=b;
l->next=NULL;
}
}
void add(LinkList l1,LinkList l2,LinkList &L)
{
int cc=0;
L=new LNode;
LNode *p=L;
l1=l1->next,l2=l2->next;
while(l1&&l2){
p->next=new LNode;
if(l1->index<l2->index){//指数比较,小的先进行 ,l1小
p->next->coef=l1->coef;
p->next->index=l1->index;
l1=l1->next;
} else if(l1->index==l2->index){//指数相同的相加
int u=l1->coef+l2->coef;
if(u==0){//为0
p->next->coef=0;
p->next->index=0;
}else{//不为0
p->next->coef=u;
p->next->index=l1->index;
}
l1=l1->next;
l2=l2->next;
}else{//l2小
p->next->coef=l2->coef;
p->next->index=l2->index;
l2=l2->next;
}
p=p->next;
}
while(l1){
p->coef=l1->coef;
p->index=l1->index;
l1=l1->next;
p->next=new LNode;
p=p->next;
}
while(l2){
p->coef=l2->coef;
p->index=l2->index;
l2=l2->next;
p->next=new LNode;
p=p->next;
}
p->next=NULL;
}
void print(LinkList L)
{
int kk=0;
while(L->next!=NULL){
kk++;
L=L->next;
if(kk==1){//第一个数
if(L->coef==0){//a=0
continue;
}else if(L->coef==1){//a=1 剩下都有b是0 1 其他的情况
if(L->index==0){
printf("%d",L->coef);//就是1
}else if(L->index==1){
printf("x");
}else{
printf("x^%d",L->index);
}
}else{//a是其他情况
if(L->index==0){
printf("%d",L->coef);
}else if(L->index==1){
printf("%dx",L->coef);
}else{
printf("%dx^%d",L->coef,L->index);
}
}
} else{//不是第一个
if(L->coef>=0){//正数和0
if(L->coef==0){//a=0
continue;
}else if(L->coef==1){//a=1 剩下都有b是0 1 其他的情况
if(L->index==0){
printf("+%d",L->coef);//就是1
}else if(L->index==1){
printf("+x");
}else{
printf("+x^%d",L->index);
}
}else{//a是其他情况
if(L->index==0){
printf("+%d",L->coef);
}else if(L->index==1){
printf("+%dx",L->coef);
}else{
printf("+%dx^%d",L->coef,L->index);
}
}
}else{
{
if(L->index==0){
printf("%d",L->coef);
}else if(L->index==1){
printf("%dx",L->coef);
}else{
printf("%dx^%d",L->coef,L->index);
}
}
}
}
}
printf("\n");
}