1-1 一元多项式的乘法与加法运算 (25 分)
设计函数分别求两个一元多项式的乘积与和。
输入格式:
输入分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
我怕他出啥幺蛾子系数指数的,就整了个map去存系数指数,然后遍历map输出,由于map自动从小到大排序,我也不用费事,但是输出从大到小输出,反过来输出 由于没学过auto啥的究竟怎么灵活使用,我就拼凑出了一个办法....显得很鸡肋
鸡肋的map倒序输出内容
void show(map<int,int>mult){
auto it=mult.end();
++it++;
for(;it!=mult.begin();it--){
cout<<it->second<<" "<<it->first<<" ";
}it--;
cout<<mult.begin()->second<<" "<<mult.begin()->first<<endl;
}
感觉整挺好,写完了交上去,一个错误,一个超时。。
错误还能改改,超时还是换个方法别用map了吧
#include<iostream>
#include<map>
using namespace std;
void show(map<int,int>mult){
auto it=mult.end();
++it++;
for(;it!=mult.begin();it--){
cout<<it->second<<" "<<it->first<<" ";
}it--;
cout<<mult.begin()->second<<" "<<mult.begin()->first<<endl;
}
int main(){
map<int,int>m1;
map<int,int>m2;
map<int,int>add;//+
map<int,int>mult;//*
int n;
cin>>n;
for(int i=0;i<n;i++){
int a,b;
cin>>a>>b;
m1[b]=a;
add[b]+=a;
}cin>>n;
for(int i=0;i<n;i++){
int a,b;
cin>>a>>b;
m2[b]=a;
add[b]+=a;
}for(auto it=m1.begin();it!=m1.end();it++){
for(auto it2=m2.begin();it2!=m2.end();it2++){
mult[it->first+it2->first]+=it->second*it2->second;
}
}
show(mult);
show(add);
return 0;
}
所以错误我也没调处来,直接换朴素的数组存。。。;