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

来源:互联网 发布:百万公众网络测试登录 编辑:程序博客网 时间:2024/06/02 20:19

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

输入格式:

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

输出格式:

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

输入样例:

4 3 4 -5 2  6 1  -2 03 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<algorithm>#include<vector>using namespace std;struct dxs{int xi;int zhi;}; dxs c;vector<dxs> d1;    //多项式1 vector<dxs> d2;    //多项式2 vector<dxs> d;vector<dxs> ::iterator p1,p2;int cmp(dxs x,dxs y){return x.zhi>y.zhi; }void mul(){       //乘 bool flag=0;for(p1=d1.begin();p1!=d1.end();p1++){for(p2=d2.begin();p2!=d2.end();p2++){c.xi=p1->xi * p2->xi;c.zhi=p1->zhi + p2->zhi;d.push_back(c);}}sort(d.begin(),d.end(),cmp);for(p1=d.begin();p1!=d.end();p1=p2){for(p2=p1+1;p2!=d.end()&&p1->zhi==p2->zhi;p2++){p1->xi = p1->xi + p2->xi;}if(p1->xi!=0){if(flag)cout<<" ";elseflag = true;cout<<p1->xi<<" "<<p1->zhi;}}if(d.size()==0)cout<<"0 0";cout<<endl;}void add(){        //加 d.clear();bool flag=0;for(p1=d1.begin(),p2=d2.begin();p1!=d1.end()&&p2!=d2.end();){if(p1->zhi>p2->zhi){if(flag)cout<<" ";elseflag = true;cout<<p1->xi<<" "<<p1->zhi;p1++;}else if(p1->zhi<p2->zhi){if(flag)cout<<" ";elseflag = true;cout<<p2->xi<<" "<<p2->zhi;p2++;} else {if(p1->xi+p2->xi){if(flag)cout<<" ";elseflag = true;cout<<p1->xi+p2->xi<<" "<<p1->zhi;}p1++;p2++;}}if(p1!=d1.end()){if(flag)cout<<" ";elseflag = true;cout<<p1->xi<<" "<<p1->zhi;p1++;}if(p2!=d2.end()){if(flag)cout<<" ";elseflag = true;cout<<p2->xi<<" "<<p2->zhi;p2++;}if(!flag)cout<<"0 0";cout<<endl;}int main(){int m,n;int x,z;int i,j,k;cin>>m;for(i=0;i<m;i++){cin>>x>>z;c.xi=x;c.zhi=z;d1.push_back(c);}cin>>n;for(i=0;i<n;i++){cin>>x>>z;c.xi=x;c.zhi=z;d2.push_back(c);}mul();add();}

0 0
原创粉丝点击