#include<stdio.h>
#include <string.h>
#include<stdlib.h>
typedef struct Polynode
{
int coef,exp;
struct Polynode *next;
}Pnode;
Pnode* creat()
{
Pnode *rear,*s,*head;
int c,e;
head=(Pnode *)malloc(sizeof(Pnode));
rear=head;
scanf("%d %d",&c,&e);
while(c!=0)
{
s=(Pnode *)malloc(sizeof(Pnode));
s->coef=c;
s->exp=e;
rear->next=s;
rear=s;
scanf("%d %d",&c,&e);
rear->next=NULL;
}
}//尾插法以0结束
Pnode* polyadd(Pnode *p1,Pnode p2)
{
int sum=0,i=0,c[100],e[100],j=0;
Pnode r;
p1=p1->next;
p2=p2->next;
Pnode *head;
Pnode *l,*s;
head=(Pnode *)malloc(sizeof(Pnode));
head->next=NULL;
l=head;
while(p1!=NULL&&p2!=NULL)
{
sum=p1->coef+p2->coef;
if(p1->exp>p2->exp)//p1的指数大于p2的指数
s=(Pnode *)malloc(sizeof(Pnode));
l->next=s;
s->exp=p2->exp;
s->coef=p2->coef;
l=s;
p2=p2->next;
}
if(p1->expexp)
{
if(p1->exp>p2->exp)//p1的指数小于p2的指数
s=(Pnode *)malloc(sizeof(Pnode));
l->next=s;
s->exp=p1->exp;
s->coef=p1->coef;
l=s;
p1=p1->next;
}
if(p1->exp==p2->exp&&sum!=0)
{
s=(Pnode *)malloc(sizeof(Pnode));
l->next=s;
s->coef=sum;
s->exp=p1->exp;
l=s;
p1=p1->next;
p2=p2->next;
}
if(p1->exp==p2->exp&&sum==0)
{
p1=p1->next;
p2=p2->next;
}
printf("升幂输出为:\n");
while(l!=NULL)
{
printf("%dx^%d",l->coef,l->exp);
c[i]=l->coef;
e[i]=l->exp;
l=l->next;
i++;
if(l!=NULL)
printf("+");
}
printf("降幂输出为:\n");
for(j=0;i<=i;j++)
{
printf("%dx%d",c[j],e[j]);
if(c[j+1]!=-1&&e[j+1]!=-1)
printf("+");
}
}
Pnode* polyminus(Pnode *p1,Pnode p2)
{
int sum=0,i=0,c[100],e[100],j=0;
Pnode r;
p1=p1->next;
p2=p2->next;
Pnode *head;
Pnode *l,*s;
head=(Pnode *)malloc(sizeof(Pnode));
head->next=NULL;
l=head;
while(p1!=NULL&&p2!=NULL)
{
sum=p1->coef-p2->coef;
if(p1->exp>p2->exp)//p1的指数大于p2的指数
s=(Pnode *)malloc(sizeof(Pnode));
l->next=s;
s->exp=p2->exp;
s->coef=p2->coef;
l=s;
p2=p2->next;
}
if(p1->expexp)
{
if(p1->exp>p2->exp)//p1的指数小于p2的指数
s=(Pnode *)malloc(sizeof(Pnode));
l->next=s;
s->exp=p1->exp;
s->coef=p1->coef;
l=s;
p1=p1->next;
}
if(p1->exp==p2->exp&&sum!=0)
{
s=(Pnode *)malloc(sizeof(Pnode));
l->next=s;
s->coef=sum;
s->exp=p1->exp;
l=s;
p1=p1->next;
p2=p2->next;
}
if(p1->exp==p2->exp&&sum==0)
{
p1=p1->next;
p2=p2->next;
}
printf("升幂输出为:\n");
while(l!=NULL)
{
printf("%dx^%d",l->coef,l->exp);
c[i]=l->coef;
e[i]=l->exp;
l=l->next;
i++;
if(l!=NULL)
printf("-");
}
printf("降幂输出为:\n");
for(j=0;i<=i;j++)
{
printf("%dx%d",c[j],e[j]);
if(c[j+1]!=-1&&e[j+1]!=-1)
printf("-");
}
}
Pnode* polymultiply(Pnode *p1,Pnode p2)
{
int sum=0,i=0,c[100],e[100],j=0;
Pnode r;
p1=p1->next;
p2=p2->next;
Pnode *head;
Pnode *l,*s;
head=(Pnode )malloc(sizeof(Pnode));
head->next=NULL;
l=head;
while(p1!=NULL&&p2!=NULL)
{
sum=p1->coefp2->coef;
if(p1->exp>p2->exp)//p1的指数大于p2的指数
s=(Pnode *)malloc(sizeof(Pnode));
l->next=s;
s->exp=p2->exp;
s->coef=p2->coef;
l=s;
p2=p2->next;
}
if(p1->expexp)
{
if(p1->exp>p2->exp)//p1的指数小于p2的指数
s=(Pnode )malloc(sizeof(Pnode));
l->next=s;
s->exp=p1->exp;
s->coef=p1->coef;
l=s;
p1=p1->next;
}
if(p1->exp==p2->exp&&sum!=0)
{
s=(Pnode )malloc(sizeof(Pnode));
l->next=s;
s->coef=sum;
s->exp=p1->exp;
l=s;
p1=p1->next;
p2=p2->next;
}
if(p1->exp==p2->exp&&sum==0)
{
p1=p1->next;
p2=p2->next;
}
printf("升幂输出为:\n");
while(l!=NULL)
{
printf("%dx^%d",l->coef,l->exp);
c[i]=l->coef;
e[i]=l->exp;
l=l->next;
i++;
if(l!=NULL)
printf("");
}
printf("降幂输出为:\n");
for(j=0;i<=i;j++)
{
printf("%dx%d",c[j],e[j]);
if(c[j+1]!=-1&&e[j+1]!=-1)
printf("");
}
}
int main()
{
int i,j;
printf("| ------------------ 请输入要进行的操作----------- |\n");
printf("|------------------ 1:输入Am--------------------- |\n");
printf("| ------------------ 2:输入Bn----------------------|\n");
printf("| ------------------ 3:计算Am+Bn-------------------|\n");
printf("| ------------------ 4:计算Am-Bn-------------------|\n");
printf("| ------------------ 5:计算Am*Bn-------------------|\n");
printf("| ------------------ 6:退出------------------------|\n");
scanf("%d",&i);
{
Pnode *polya,*polyb,*polyc;
switch(i)
{
case 1:
{
printf("请输入Am\n");
polya=creat() ;
}
case 2:
{
printf("请输入Bn\n");
polyb=creat() ;
}
case 3:
{
printf("M=Am+Bn=:");
polyadd(polya,polyb);
}
case 4:
{
printf("M=Am-Bn=:");
polyminus(polya,polyb) ;
}
case 5:
{
printf("M=Am*Bn=:");
polymultiply(polya,polyb);
}
}
}
printf("运算结束\n");
}