一元多项式的求和

题目描述

一个一元多项式可以看作由若干个一元单项式按降幂排列成的线性表。请编写程序对输入的两个一元多项式求和,并输出求和的结果。
本题是附加代码模式,主函数main会自动附加在同学们提交的代码后面,请同学们在提交的时候注释掉附加代码。
附加代码如下:

 


 

输入格式

输入为两个一元多项式,每个一元多项式输入一行,按照降幂依次输入每个单项式的系数和指数,并以-1 -1作为结束。系数和指数均为整数,指数不小于0。
数据范围:每个多项式的数据项数量不超过10000
 

输出格式

输出为求和结果多项式,按照降幂依次输出每个单项的系数和指数,每个数值后面用一个空格隔开,输出结果多项式后换行。 系数为0的单项式不得输出——除非结果多项式就是0,则直接输出0。

输入样例 复制
2 7 3 5 12 1 6 0 -1 -1
7 5 9 4 3 0 -1 -1
输出样例 复制
2 7 10 5 9 4 12 1 9 0 

 代码

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
struct  Node{
    int r;  // 系数
    int e;  // 指数
};
// 线性表存储一元多项式
struct List{
    Node data[10000+5];
    int len;
};

// 输出多项式
void PrintList(const List& list){
    int i=0;
    while(list.data[i].e>=0)
    {
        
        cout<<list.data[i].r;
        cout<<" ";
        cout<<list.data[i].e;
        cout<<" ";
        i++;
    }
    


}

// 输入多项式
List InputList(){
    List list;
    for(int i=0;i<5000;i++)
    {
        cin>>list.data[i].r>>list.data[i].e;
        if(list.data[i].r==-1&&list.data[i].e==-1)
        {
            break;
        }

    }
    return list;
}

// 多项式求和
List add(const List& list1, const List& list2)
{
    List result;
    int i=0, j=0,k=0;
    while (list1.data[i].r!=-1||list1.data[i].e!=-1) {
        if (list1.data[i].e > list2.data[j].e) {
            result.data[k++] = list1.data[i++];
        } else if (list1.data[i].e < list2.data[j].e) {
            result.data[k++] = list2.data[j++];
        } else {
            int sum = list1.data[i].r + list2.data[j].r;
            if (sum != 0) {
                result.data[k].r = sum;
                result.data[k++].e = list1.data[i].e;
            }
            i++;
            j++;
        }
        if(list2.data[j].r==-1&&list2.data[j].e==-1)
        {
            break;

        }

    }
    while(list1.data[i].r!=-1||list1.data[i].e!=-1)
    {
        result.data[k++]=list1.data[i++];
    }
    while(list2.data[j].r!=-1||list2.data[j].e!=-1)
    {
        result.data[k++]=list1.data[j++];
    }
    return result;

}
int main()
{
         // freopen("/config/workspace/answer/DataStructure/test.in","r",stdin);    
    List list1 = InputList();
    List list2 = InputList();
    List list = add(list1, list2);
    PrintList(list);
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值