您的位置:首页 > 其它

PTA 02-线性结构2 一元多项式的乘法与加法运算

2017-09-20 00:11 239 查看



02-线性结构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


这一题我用了蛮长的时间debug,最后救我的是几串数字。


例子输入与输出:

序号输入输出
14 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
22 1 2 1 0

2 1 2 -1 0
1 4 -1 0

2 2
32 -1000 1000 1000 0

2 1000 1000 -1000 0
-1000000 2000 2000000 1000 -1000000 0

0 0
40

1 999 1000
0 0

999 1000
每次我算完之后,不知道系数为零的要省去!!!!

贴上代码:
#include<iostream>
using namespace std;
struct nood{
int trad;
int index;
};
int main()
{
int n,m;
nood c1[1000];
nood c2[1000];
nood c3[2000];
nood c4[2000];
cin>>n;
for(int i=0;i<n;i++)
{
cin>>c1[i].trad>>c1[i].index;
}
cin>>m;
int k1=0,k2=0;
for(int i=0;i<m;i++)
{
cin>>c2[i].trad>>c2[i].index;
}
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
c3[k1].trad=c1[j].trad*c2[i].trad;
c3[k1].index=c1[j].index+c2[i].index;
k1++;
}
}
for(int j=0,i=0;j<m||i<n;)
{
if(c1[i].index!=c2[j].index&&j!=m&&i!=n)
{
if(c1[i].index>c2[j].index)
{
c4[k2].trad=c1[i].trad;
c4[k2].index=c1[i].index;
k2++;
i++;
}
else
{
c4[k2].trad=c2[j].trad;
c4[k2].index=c2[j].index;
k2++;
j++;
}
}
else if(c1[i].index==c2[j].index&&j!=m&&i!=n)
{
c4[k2].trad=c1[i].trad+c2[j].trad;
c4[k2].index=c1[i].index;
k2++;
i++,j++;
}
else
{
if(j==m&&i<n)
{
c4[k2].trad=c1[i].trad;
c4[k2].index=c1[i].index;
k2++;
i++;
}
if(j<m&&i==n)
{
c4[k2].trad=c2[j].trad;
c4[k2].index=c2[j].index;
k2++;
j++;
}
}
}
for(int i=0;i<k1-1;i++)
{
for(int j=i+1;j<k1;j++)
{
if(c3[i].index==c3[j].index)
{
c3[i].trad+=c3[j].trad;
for(int z=j+1;z<k1;z++)
{
c3[z-1].trad=c3[z].trad;
c3[z-1].index=c3[z].index;
}
k1--;
}
}
}

for(int i=0;i<k2-1;i++)
{
if(c4[i].trad==0)
{
for(int j=i+1;j<k2;j++)
{
c4[j-1].trad=c4[j].trad;
c4[j-1].index=c4[i].index;
}
k2--;
}
}
if(c4[k2-1].trad==0)
k2--;
for(int i=0;i<k1-1;i++)
{
if(c3[i].trad==0)
{
for(int j=i+1;j<k1;j++)
{
c3[j-1].trad=c3[j].trad;
c3[j-1].index=c3[j].index;
}
k1--;
}
}
if(c3[k1-1].trad==0)
k1--;
int cnt=0;
for(int i=0;i<k1;i++)
{
if(!cnt)
cout<<c3[i].trad<<" "<<c3[i].index;
else
cout<<" "<<c3[i].trad<<" "<<c3[i].index;
cnt++;
}
if(!cnt)
cout<<"0 0";
cout<<endl;
cnt=0;
for(int i=0;i<k2;i++)
{
if(cnt) cout<<" ";
cout<<c4[i].trad<<" "<<c4[i].index;
cnt++;
}
if(!cnt)
cout<<"0 0";
cout<<endl;
//cout<<c4[k2-1].trad<<" "<<c4[k2-1].index;

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: