#include<stdio.h>#include<stdlib.h>#include<malloc.h>#define NULL 0typedef 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/155529.html
標籤:C語言
