多项式

 
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
   int zhi;
   int xi;
   struct node *next; 
}lnode,*linklist;
linklist createPoly()
{
lnode *head,*s,*r;
int a,b;
head=(linklist)malloc(sizeof(lnode));
r=head;
head->next=NULL;
scanf("%d%d",&a,&b);
while(a!=0)
{
s=(linklist)malloc(sizeof(lnode));
s->xi=a;
   s->zhi=b;
s->next=r->next; 
r->next=s;
r=s;
scanf("%d%d",&a,&b);
}
r->next=NULL;
return (head);
}




linklist AddPoly(linklist La,linklist Lb)
{
lnode *pa,*pb,*pc,*H,*r,*s;
pa=La->next;
pb=Lb->next;
H=(linklist)malloc(sizeof(lnode));
H->next==NULL;
r=H;
while(pa!=NULL&&pb!=NULL)
{
s=(linklist)malloc(sizeof(lnode));
if(pa->zhi<pb->zhi)
{
s->zhi=pa->zhi;
s->xi=pa->xi;
pa=pa->next;
}
else if(pa->zhi>pb->zhi)
{
s->zhi=pb->zhi;
s->xi=pb->xi;
pb=pb->next;
}
else
{
s->zhi=pa->zhi;
s->xi=pa->xi+pb->xi;
pb=pb->next;
pa=pa->next;
}
if(s->xi!=0)
{
s->next=r->next;
r->next=s;
r=s;
}
else free(s);

}
while(pa!=NULL)
{
  s=(linklist)malloc(sizeof(lnode));
       s->xi=pa->xi;
  s->zhi=pa->zhi;
  pa=pa->next;
  //s->next=r->next;
  r->next=s;
  r=s;
}
while(pb!=NULL)
{
  s=(linklist)malloc(sizeof(lnode));
       s->xi=pb->xi;
  s->zhi=pb->zhi;
  pb=pb->next;
  //s->next=r->next;
  r->next=s;
  r=s;
}
r->next=NULL;
return H;

}


linklist subtractPolyn(linklist La,linklist Lb)
{
lnode *h,*p,*pd;
p=Lb->next;
h=Lb;
while(p)
{
p->xi*=-1;
p=p->next;
}
pd=AddPoly(La,h);
for(p=h->next;p;p=p->next)
p->xi*=-1;
return pd;
} 


void prinf(linklist p)
{
    int f=0;
linklist q;
q=p->next;
if(q==NULL)
{
printf("0\n");

}
while(q!=NULL)
{
if(q->xi>0&&f!=0) printf("+");
if(q->xi!=1&&q->xi!=-1)
{
printf("%d",q->xi);
if(q->zhi==1)      printf("X");
//else if(q->zhi==0) printf("X^%d",q->zhi);
else if(q->zhi!=1) printf("X^%d",q->zhi);
}
else
{ 
if(q->xi==1)
{
   if(q->zhi==0)printf("1");
else if(q->zhi==1)printf("X");
else printf("X^%d",q->zhi);
}
if(q->xi==-1)
{
   if(q->zhi==0)printf("-1");
else if(q->zhi==1)printf("-X");
else printf("-X^%d",q->zhi);
} 
}
q=q->next;
f++;
}
printf("\n");
}


linklist MultiplyPoly(linklist La,linklist Lb)
{
lnode *pa,*pb,*H,*r,*s;
pa=La->next;
pb=Lb->next;
H=(linklist)malloc(sizeof(lnode));
H->next==NULL;
r=H;
while(pa!=NULL)
{
pb=Lb->next; 
   while(pb!=NULL)
   {
    s=(linklist)malloc(sizeof(lnode));
    s->zhi=pa->zhi+pb->zhi;
   s->xi=pa->xi*pb->xi;
    pb=pb->next;

s->next=r->next;
r->next=s;
r=s;

}

pa=pa->next;
    }
r->next=NULL;
    return H;
} 


linklist AddPoly2(linklist L)
{
lnode *q,*r,*p,*H;
H=L;
q=L->next;
while(q->next!=NULL)
{
p=q;
while(p->next!=NULL)
{  
   r=p;
   p=p->next;
if(q->zhi==p->zhi)
{   
   q->xi=q->xi+p->xi;
r->next=p->next;
p=p->next;
free(p);
while(1)
{
if(q->zhi==p->zhi)
{
q->xi=q->xi+p->xi;
   r->next=p->next;
p=p->next;
   free(p);
   
}
if(q->zhi!=p->zhi)  break; 
   } 
}
//else p=p->next;
}
q=q->next;

}
return H; 
}




main()
{
lnode *La,*Lb,*p,*q,*s,*r;
printf("请输入多项式Pa的系数、指数,输入0结束:");
La=createPoly();
printf("Pa=");
    prinf(La);
    printf("请输入多项式Pb的系数、指数,输入0结束:");
Lb=createPoly();
printf("Pb=");
prinf(Lb);
p=AddPoly(La,Lb);
printf("多项式之和:Pa+Pb=");
prinf(p);
q=subtractPolyn(La,Lb);
printf("多项式之差:Pa-Pb=");
prinf(q);
s=MultiplyPoly(La,Lb); 
printf("多项式之积:Pa*Pb=");
prinf(s);
r=AddPoly2(s);
printf("多项式之积:Pa*Pb=");
prinf(r);
}

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值