【多项式A+B】

1.系数可以用一个数组来存,下标就是x的指数。如a[3]=5说明x三次方的系数为5;

这题知道这个就可以求解了。

2.输入的时候用while(k--)更容易输入。

#include <iostream>
using namespace std;
const int N=1010;
double a[N],b[N],c[N];
int main(){
    int k;
    cin>>k;
    while(k--){
        int n;
        double q;
        cin>>n>>q;
        a[n]=q;
    }
    cin>>k;
    while(k--){
        int n;
        double q;
        cin>>n>>q;
        b[n]=q;
    }
    for(int i=0;i<N;i++)c[i]=a[i]+b[i];
    int cnt=0;
    for(int i=0;i<N;i++){
        if(c[i])cnt++;
    }
    cout<<cnt;
    for(int i=N-1;i>=0;i--)if(c[i])printf(" %d %.1f",i,c[i]);
    return 0;
}

好的,我可以帮你解决这个问题。以下是使用链表结构存储多项式并计算两个多项式A+B的C语言代码: ```c #include <stdio.h> #include <stdlib.h> // 定义多项式项结构体 typedef struct PolyNode { int coef; // 系数 int expon; // 指数 struct PolyNode* next; // 下一项 } PolyNode, *Polynomial; // 创建一个新的多项式项 Polynomial createPolyNode(int coef, int expon) { Polynomial node = (Polynomial)malloc(sizeof(PolyNode)); node->coef = coef; node->expon = expon; node->next = NULL; return node; } // 将新的多项式项插入到多项式中 void insertPolyNode(Polynomial* p, Polynomial node) { if (*p == NULL) { // 如果多项式为空,则直接将新的多项式项作为第一项 *p = node; } else if ((*p)->expon < node->expon) { // 如果新的多项式项的指数比当前多项式项的指数更大,则将新的多项式项作为第一项 node->next = *p; *p = node; } else if ((*p)->expon == node->expon) { // 如果新的多项式项的指数与当前多项式项的指数相等,则将它们的系数相加并更新当前多项式项的系数 (*p)->coef += node->coef; free(node); // 释放新的多项式项所占用的内存空间 } else { // 如果新的多项式项的指数比当前多项式项的指数更小,则将新的多项式项插入到当前多项式项的后面 insertPolyNode(&((*p)->next), node); } } // 读取多项式的每一项,并将它们插入到多项式中 Polynomial readPoly() { Polynomial poly = NULL; int n, coef, expon; scanf("%d", &n); // 读取多项式项的个数 while (n--) { scanf("%d %d", &coef, &expon); // 读取多项式项的系数指数 insertPolyNode(&poly, createPolyNode(coef, expon)); // 将新的多项式项插入到多项式中 } return poly; } // 输出多项式的每一项 void printPoly(Polynomial poly) { if (poly == NULL) { // 如果多项式为空,则输出 0 printf("0\n"); return; } while (poly != NULL) { printf("%d %d", poly->coef, poly->expon); if (poly->next != NULL) { // 如果当前多项式项不是最后一项,则输出一个空格 printf(" "); } poly = poly->next; } printf("\n"); } // 计算两个多项式的和 Polynomial addPoly(Polynomial a, Polynomial b) { Polynomial c = NULL; while (a != NULL && b != NULL) { if (a->expon > b->expon) { // 如果多项式 a 的当前项的指数更大,则将多项式 a 的当前项插入到多项式 c 中 insertPolyNode(&c, createPolyNode(a->coef, a->expon)); a = a->next; } else if (a->expon < b->expon) { // 如果多项式 b 的当前项的指数更大,则将多项式 b 的当前项插入到多项式 c 中 insertPolyNode(&c, createPolyNode(b->coef, b->expon)); b = b->next; } else { // 如果多项式 a 和多项式 b 的当前项的指数相等,则将它们的系数相加并插入到多项式 c 中 insertPolyNode(&c, createPolyNode(a->coef + b->coef, a->expon)); a = a->next; b = b->next; } } while (a != NULL) { // 将多项式 a 的剩余部分插入到多项式 c 中 insertPolyNode(&c, createPolyNode(a->coef, a->expon)); a = a->next; } while (b != NULL) { // 将多项式 b 的剩余部分插入到多项式 c 中 insertPolyNode(&c, createPolyNode(b->coef, b->expon)); b = b->next; } return c; } int main() { Polynomial a = readPoly(); // 读取多项式 A Polynomial b = readPoly(); // 读取多项式 B Polynomial c = addPoly(a, b); // 计算多项式 A+B 的和 printPoly(c); // 输出多项式 A+B 的和 return 0; } ``` 希望这个代码可以帮助到你!如果你有任何问题,请随时问我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值