#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define NULL 0
typedef struct Polynode {
int coef; //因子
int exp; //冪
struct Polynode *next;
}Polynode , * Polylist;
Polylist polycreate( )
{
Polynode *rear, *head, *s;
int c, e;
rear=head=(Polynode *)malloc(sizeof(Polynode));
scanf("%d%d",&c,&e);
while(c!=0)
{
s=(Polynode*)malloc(sizeof(Polynode));
s->coef=c;
s->exp=e;
rear->next=s;
rear=s;
scanf("%d%d",&c,&e);
}
rear->next=NULL;
return(head);
}
Polylist multyploy(Polylist pa, Polylist pb)
{
Polynode *t1,*t2,*t3,*t,*rear,*p;
int c, e;
t1=pa->next;
t2=pb->next;
p=(Polynode*)malloc(sizeof(Polynode));
p->next=NULL;
rear=p;
while(t2)
{
t3=(Polynode*)malloc(sizeof(Polynode));
t3->coef=t1->coef*t2->coef;
t3->exp=t1->exp+t2->exp;
t3->next=NULL;
rear->next=t3;
rear=t3;
t2=t2->next;
}
t1=t1->next;
while(t1)
{
t2=pb->next;
rear=p;
while(t2)
{
e=t1->exp+t2->exp;
c=t1->coef*t2->coef;
while(rear->next&&rear->next->exp<e)
rear=rear->next;
if(rear->next&&rear->next->exp==e)
{
if(rear->next->coef+c)
rear->next->coef+=c;
else
{
t=rear->next;
rear->next=t->next;
free(t);
}
}
else
{
t=(Polynode*)malloc(sizeof(Polynode));
t->coef=c;
t->exp=e;
t->next=rear->next;
rear->next=t;
rear=rear->next;
}
}
t1=t1->next;
}
t2=p;
p=p->next;
free(t2);
return p;
}
void print(Polylist p)
{
p = p->next;
while(p)
{
printf("%d", p->coef);
printf("*x^%d",p->exp);
if(p->next!=NULL)
printf(" + ");
p = p->next;
}
printf("\n");
}
void main(int argc, char* argv[])
{
Polylist pa, pb,pc; //定義三個表示多項式的鏈表
pa = polycreate(); //創建pa鏈表
pb = polycreate(); //創建pb鏈表
pc = multyploy(pa, pb); //做乘法法,結果保存在pc鏈表上
print(pc); //將加法的結果用一個多項式格式顯示在輸出設備上
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/159427.html
標籤:C語言
上一篇:想問一下這個程式為什么無法運行
