7-2 一元多项式的乘法与加法运算 (20分)

设计函数分别求两个一元多项式的乘积与和。

输入格式:

输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。

输出格式:

输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0

输入样例:

4 3 4 -5 2  6 1  -2 0
3 5 20  -7 4  3 1

输出样例:

15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1
5 20 -4 4 -5 2 9 1 -2 0
#include <iostream>
#include <cstring>

using namespace std;

struct node{
    int a, p;
};

struct node n[1000], m[1000];
int sum[2005];
int mul[4005];

int main(){
    int x, y, k;
    memset(sum, 0, sizeof(sum));
    memset(mul, 0, sizeof(mul));
    cin >> x;

    for (int i = 0; i < x; i++)    {
        cin >> n[i].a >> n[i].p;
        sum[n[i].p + 1000] += n[i].a;
    }

    cin >> y;

    for (int i = 0; i < y; i++) {
        cin >> m[i].a >> m[i].p;
        sum[m[i].p + 1000] += m[i].a;
    }

    for (int i = 0; i < x; i++)
        for (int j = 0; j < y; j++)
            mul[n[i].p + m[j].p + 2000] += n[i].a * m[j].a;

    //乘积
    k = 0;

    for (int i = 4000; i >= 0; i--)
        if (mul[i] != 0){
            if (k == 0)
                cout << mul[i] << " " << i - 2000;
            else
                cout << " " << mul[i] << " " << i - 2000;
            k++;
        }

    if (k == 0)
        cout << "0 0";

    cout << endl;

    //加和
    k = 0;

    for (int i = 2000; i >= 0; i--)
        if (sum[i] != 0) {
            if (k == 0)
                cout << sum[i] << " " << i - 1000;
            else
                cout << " " << sum[i] << " " << i - 1000;
            k++;
        }

    if (k == 0)
        cout << "0 0";

    return 0;
}
发布了132 篇原创文章 · 获赞 136 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Aibiabcheng/article/details/104707258
今日推荐