C++实现的一元多项式相加

 题目描述:      

先输入第一个多项式A,然后输入第二个多项式B。

对每个多项式,先输入“项数”、分别输入各个元素的“指数”、“ 系数”。

例如输入:

6     

8     5     4     3     2     1        

代表共6项,多项式为8x⁵+4x³+3x²

输出两个多项式相加的结果,按照指数从大到小的顺序。

输入示例:

10  

15  8  7  6  4   5  3   2   1   1

8

8  8  7  5  3  4  9  1

输出结果:

23     8     7     6     11     5     3     4     3     2        10     1

 思路:将多项式的指数项作为下标,系数项作为数组元素存入相应数组。   其余没有的指数项就赋0。输出时对于非0项从后往前遍历输出。

代码    

#include <iostream>
using namespace std;
const int MAX=100;
void output(int a[MAX]);
int main()
{
    int a,b;
    int A[MAX]={0},B[MAX]={0};
    cin>>a;                     //数组A的项数
    int xishu,zhishu;          //定义数组的系数和指数项
    for(int i=0;i<a;i+=2)       //遍历输入系数和指数,同时指数作为下标存入系数
    {
        cin>>xishu;
        cin>>zhishu;
        A[zhishu]=xishu;
    }

    cin>>b;                  //数组B的项数
    for(int i=0;i<b;i+=2)
    {
        cin>>xishu;
        cin>>zhishu;
        B[zhishu]=xishu;
    }
    //特别注意,因为多项式A,B指数项可能不完全相同,有些项不是合并而是添加。因此for循环的条件是i<MAX,而不是i<a或i<b。
    for(int i=0;i<MAX;i++)
    {
        A[i]+=B[i];
    }
    output(A);

}

void output(int a[MAX])                     //输出函数,对于数组中的非零项从大到小输出
{
    for(int i=MAX-1;i>0;i--)
    {
        if(a[i]!=0)
            cout<<a[i]<<" "<<i<<" ";
        else continue;
    }
}

输出结果:

8e9f2afb019041889537471d1350fa5e.png

其实也可以直接定义一个数组A,对数组B的操作其实就是在数组A的第一次输入上+=;

因此,main函数也可以简化:(其余部分代码一致)

int main()
{
    int a,b;
    int A[MAX]={0};
    cin>>a;                     //数组A的项数
    int xishu,zhishu;          //定义数组的系数和指数项
    for(int i=0;i<a;i+=2)       //遍历输入系数和指数,同时指数作为下标存入系数
    {
        cin>>xishu;
        cin>>zhishu;
        A[zhishu]=xishu;
    }

    cin>>b;                  
    for(int i=0;i<b;i+=2)
    {
        cin>>xishu;
        cin>>zhishu;
        A[zhishu]+=xishu;
    }
    output(A);

}

        所以说这个题其实代码部分并不难,重点是思路要捋顺,当初我就是思路不对,一直想把指数项和系数放在一个数组里做,结果浪费很长时间,最后也没有做出来。看来做这类题还是得想好了再写。

        对于这类题大家还有什么简便解法呢?欢迎留言,互相学习!

 

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值