编写一个程序实现两个一元多项式相加的运算。

【问题描述】编写一个程序实现两个一元多项式相加的运算。
【输入形式】从标准输入中读入四行数据, 其中第一行和第三行:各是是一个整数,表示第二行和第四行数据的个数; 第二行和第四行是若干个以空格分隔的整数,每一行代表一个多项式,且该多项式中各项的系数均为0或正整数,最高幂次不超过50。对于多项式 a n x n + a n − 1 x n − 1 + . . . + a 1 x 1 + a 0 x 0 a^nx^n + a^{n-1}x^{n-1}+ ... + a^1x^1 + a^0x^0 anxn+an1xn1+...+a1x1+a0x0 (n <= 50)的表示方法如下: a n    n    a n − 1    n − 1    . . .    a 1    1    a 0    0 a^n \ \ n\ \ a^{n-1} \ \ n-1\ \ ... \ \ a^1 \ \ 1 \ \ a^0 \ \ 0 an  n  an1  n1  ...  a1  1  a0  0
即相邻两个整数分别表示表达式中一项的系数和指数。在输入中只出现系数不为0的项。
【输出形式】将运算结果输出到屏幕。将系数不为0的项按指数从高到低的顺序输出,每次输出其系数和指数,均以一个空格分隔。在行的末尾也输出一个空格符,并且最后要求换行。
【样例输入】
10
54 8 2 6 7 3 25 1 78 0
6
43 7 4 2 8 1
【样例输出】54 8 43 7 2 6 7 3 4 2 33 1 78 0 (数字之间用一个空格分隔,末尾也有空格符)
【样例说明】输入文件的两行分别代表了表达式
54 x 8 + 2 x 6 + 7 x 3 + 25 x + 78 54x^8 + 2x^6 + 7x^3 + 25x + 78 54x8+2x6+7x3+25x+78
43 x 7 + 4 x 2 + 8 x 43x^7 + 4x^2 + 8x 43x7+4x2+8x
其和为
54 x 8 + 43 x 7 + 2 x 6 + 7 x 3 + 4 x 2 + 33 x + 78 54x^8 + 43x^7 + 2x^6 + 7x^3 + 4x^2 + 33x + 78 54x8+43x7+2x6+7x3+4x2+33x+78
注意:输入时候首先要输入多项式的系数个数以及指数个数的和,然后在下一行按照"系数 指数"的顺序输入系数和指数。

#include <iostream>
using namespace std;
int main()
{
    
    
    int n,m;
    cin >> n;
    int a[2][n/2];
    for(int i=0;i<n/2;i++)
    {
    
    
        cin >> a[0][i]; //存放第一个式子的系数
        cin >> a[1][i]; //存放第一个式子的指数
    }
    cin >> m;
    int b[2][m/2];
    for(int i=0;i<m/2;i++)
    {
    
    
        cin >> b[0][i]; //存放第二个式子的系数
        cin >> b[1][i]; //存放第二个式子的指数
    }
    int c[2][(m+n)/2];

    int k=0,j=0,q=0;
    while(j<n/2 && q<m/2)
    {
    
    
        //系数相等时
        if(a[1][j] == b[1][q])
        {
    
    
            c[0][k] = a[0][j]+b[0][q];
            c[1][k] = a[1][j];
            j++;q++;
        }
        else if(a[1][j] > b[1][q])
        {
    
    
            c[0][k] = a[0][j];
            c[1][k] = a[1][j];
            j++;
        }
        else
        {
    
    
            c[0][k] = b[0][q];
            c[1][k] = b[1][q];
            q++;
        }
        k++;
    }
    while(j<n/2)
    {
    
    
        c[0][k] = a[0][j];
        c[1][k] = a[1][j];
        j++;k++;
    }
    while(q<m/2)
    {
    
    
        c[0][k] = b[0][q];
        c[1][k] = b[1][q];
        q++;k++;
    }

    for(int i=0;i<k;i++)
        cout << c[0][i] << " " << c[1][i] << " ";

    cout << endl;
	return 0;
}

おすすめ

転載: blog.csdn.net/weixin_43790779/article/details/108854598