多项式乘法(牛客)

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
 

题目描述

Etéreo 吃完了元宵,又开始思考数学问题了。这次他拿了两个多项式 P\mathscr{P}P 和 Q\mathscr{Q}Q 。他知道这两个多项式的乘积也是一个多项式,但他不清楚每一项的系数。所以他又来请问你咯。

输入描述:

输入共三行。 
第一行两个整数 n,m 表示多项式 p1 的最高次项次数n和p2最高次项次数m。 
第二行 n+1 个整数,表示多项式 p1 的每一项的系数。按次数从小到大的顺序排列。 
第三行 m+1 个整数,表示多项式 p2 的每一项的系数。按次数从小到大的顺序排列。

输出描述:

输出共一行,n+m+1 个整数,表示乘积多项式的每一项的系数。按次数从小到大排列。

示例1

输入

2 3 2 1 3 1 2 0 2

2 3
2 1 3
1 2 0 2

输出

2 5 5 10 2 6

2 5 5 10 2 6

说明

(3x2+x+2)×(2x3+2x+1)=(6x5+2x4+10x3+5x2+5x+2)(3x^2 + x + 2) 
(2x^3 + 2x + 1) = (6x^5 + 2x^4 + 10x^3 + 5x^2 + 5x + 2)(3x2+x+2)×(2x3+2x+1)=(6x5+2x4+10x3+5x2+5x+2)

备注:

1≤n,m≤500
−100≤−100≤ 系数 ≤100≤100

思路:

该题我们可以使用map来做这道题。在输入的处理上,我们使用两个map(p1,p2)来储存数据。Key值(第一个关键字)来存次方,value值(第二个关键字)来存系数。两个多项式相乘,那么我们就按照数学方法来做题,遍历相乘。即遍历p1,p2,让它俩相乘,在使用一个map(p)来存相乘的结果,多项式相乘,系数相乘,指数相加,即p的key等于p1,p2的key相加,p的value值等于p1,p1的value想乘。因为防止相乘后又指数相同,我们需要合并同类项。即使用+=。该题需要按照指数从小到大输出。Map有自动排序,(按照key值从小到大排序).

Key值又是指数,直接遍历输出即可。

代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
    map<int,int> p1,p2,p;//建立三个map,后续方便处理输入和输出。
    int n,x,y,m;
    cin>>n>>m;
    for(int i=0;i<=n;i++){
        cin>>x;
        p1[i]+=x;//key值作为指数,value作为系数。
    }
    for(int i=0;i<=m;i++){
        cin>>x;
        p2[i]+=x;//key值作为指数,value作为系数。
    }
        for(auto it=p1.begin();it!=p1.end();it++){
            for(auto t=p2.begin();t!=p2.end();t++){
                p[it->first+t->first]+=it->second*t->second;//多项式相乘,指数相加,系数相乘。
            }
        }
    for(auto it: p)
            cout<<it.second<<" ";//遍历输出即可。
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

加油小鬼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值