您的位置:首页 > 理论基础 > 数据结构算法

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

2017-01-22 19:29 260 查看
设计函数分别求两个一元多项式的乘积与和。

输入格式:

输入分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<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<<" ";
else
flag = 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<<" ";
else
flag = true;
cout<<p1->xi<<" "<<p1->zhi;
p1++;
}
else if(p1->zhi<p2->zhi){
if(flag)
cout<<" ";
else
flag = true;
cout<<p2->xi<<" "<<p2->zhi;
p2++;
}
else {
if(p1->xi+p2->xi){
if(flag)
cout<<" ";
else
flag = true;
cout<<p1->xi+p2->xi<<" "<<p1->zhi;
}
p1++;
p2++;
}
}
if(p1!=d1.end()){
if(flag)
cout<<" ";
else
flag = true;
cout<<p1->xi<<" "<<p1->zhi;
p1++;
}
if(p2!=d2.end()){
if(flag)
cout<<" ";
else
flag = 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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息