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

typedef struct node { int coefficient; // 系数 int exponent; // 指数 struct node *next; // 指向下一个节点的指针 } Node, *Polynomial;

Polynomial create_poly(int n) { // 创建n个节点的多项式 Polynomial p, r, head = NULL; // p指向当前节点,r指向前一个节点,head指向头节点

head = (Polynomial)malloc(sizeof(Node)); // 创建头节点
head->next = NULL;
r = head;

for (int i = 0; i < n; i++) { // 循环创建n个节点
    p = (Polynomial)malloc(sizeof(Node));
    scanf("%d%d", &(p->coefficient), &(p->exponent));
    p->next = NULL;

    r->next = p; // 将当前节点连接到前一个节点后面
    r = p; // 将前一个节点指针移动到当前节点
}

return head; // 返回头节点指针

}

void print_poly(Polynomial p) { // 打印多项式 while (p->next != NULL) { p = p->next; printf("%d %d ", p->coefficient, p->exponent); } printf("\n"); }

Polynomial add_poly(Polynomial p1, Polynomial p2) { // 多项式加法 Polynomial p, r, head = NULL; // p指向当前节点,r指向前一个节点,head指向头节点

head = (Polynomial)malloc(sizeof(Node)); // 创建头节点
head->next = NULL;
r = head;

while (p1->next != NULL && p2->next != NULL) { // 当两个多项式都有节点时
    p = (Polynomial)malloc(sizeof(Node));
    p->next = NULL;

    if (p1->next->exponent > p2->next->exponent) { // 当p1的指数大于p2的指数时
        p->coefficient = p1->next->coefficient;
        p->exponent = p1->next->exponent;
        p1 = p1->next;
    } else if (p1->next->exponent < p2->next->exponent) { // 当p1的指数小于p2的指数时
        p->coefficient = p2->next->coefficient;
        p->exponent = p2->next->exponent;
        p2 = p2->next;
    } else { // 当p1的指数等于p2的指数时
        p->coefficient = p1->next->coefficient + p2->next->coefficient;
        p->exponent = p1->next->exponent;
        p1 = p1->next;
        p2 = p2->next;
    }

    r->next = p; // 将当前节点连接到前一个节点后面
    r = p; // 将前一个节点指针移动到当前节点
}

while (p1->next != NULL) { // 当p1还有节点时
    p = (Polynomial)malloc(sizeof(Node));
    p->coefficient = p1->next->coefficient;
    p->exponent = p1->next->exponent;
    p->next = NULL;

    r->next = p; // 将当前节点连接到前一个节点后面
    r = p; // 将前一个节点指针移动到当前节点
    p1 = p1->next;
}

while (p2->next != NULL) { // 当p2还有节点时
    p = (Polynomial)malloc(sizeof(Node));
    p->coefficient = p2->next->coefficient;
    p->exponent = p2->next->exponent;
    p->next = NULL;

    r->next = p; // 将当前节点连接到前一个节点后面
    r = p; // 将前一个节点指针移动到当前节点
    p2 = p2->next;
}

return head; // 返回头节点指针

}

int main() { int n1, n2; Polynomial p1, p2, p3;

scanf("%d", &n1); // 输入第一个多项式的节点个数
p1 = create_poly(n1); // 创建第一个多项式

scanf("%d", &n2); // 输入第二个多项式的节点个数
p2 = create_poly(n2); // 创建第二个多项式

p3 = add_poly(p1, p2); // 计算两个多项式的和
print_poly(p3); // 打印结果多项式

return 0;

}


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

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