#include<stdio.h> #include<stdlib.h>

typedef struct PolyNode *Polynomial; struct PolyNode{ int coef; int expon; Polynomial next; };

Polynomial ReadPoly(){ int n, c, e; Polynomial p, rear, t; p = (Polynomial)malloc(sizeof(struct PolyNode)); p->next = NULL; rear = p; scanf("%d", &n); while(n--){ scanf("%d %d", &c, &e); t = (Polynomial)malloc(sizeof(struct PolyNode)); t->coef = c; t->expon = e; rear->next = t; rear = t; } rear->next = NULL; return p; }

Polynomial Add(Polynomial p1, Polynomial p2){ Polynomial front, rear, temp; int sum; rear = (Polynomial)malloc(sizeof(struct PolyNode)); front = rear; while(p1 && p2){ if(p1->expon == p2->expon){ sum = p1->coef + p2->coef; if(sum) { temp = (Polynomial)malloc(sizeof(struct PolyNode)); temp->coef = sum; temp->expon = p1->expon; rear->next = temp; rear = temp; } p1 = p1->next; p2 = p2->next; } else if(p1->expon > p2->expon){ temp = (Polynomial)malloc(sizeof(struct PolyNode)); temp->coef = p1->coef; temp->expon = p1->expon; rear->next = temp; rear = temp; p1 = p1->next; } else{ temp = (Polynomial)malloc(sizeof(struct PolyNode)); temp->coef = p2->coef; temp->expon = p2->expon; rear->next = temp; rear = temp; p2 = p2->next; } } while(p1){ temp = (Polynomial)malloc(sizeof(struct PolyNode)); temp->coef = p1->coef; temp->expon = p1->expon; rear->next = temp; rear = temp; p1 = p1->next; } while(p2){ temp = (Polynomial)malloc(sizeof(struct PolyNode)); temp->coef = p2->coef; temp->expon = p2->expon; rear->next = temp; rear = temp; p2 = p2->next; } rear->next = NULL; temp = front; front = front->next; free(temp); return front; }

void PrintPoly(Polynomial p){ int flag = 0; if(!p){ printf("0 0\n"); return; } while(p){ if(!flag) flag = 1; else printf(" "); printf("%d %d", p->coef, p->expon); p = p->next; } printf("\n"); }

int main(){ Polynomial p1, p2, p; p1 = ReadPoly(); p2 = ReadPoly(); p = Add(p1, p2); PrintPoly(p); return 0; }

C语言实现一元多项式加法运算

原文地址: https://www.cveoy.top/t/topic/lRHb 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录