设计函数分别求两个一元多项式的乘积与和。
输入格式:
输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式:
输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0
。
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int a[10000][2] = { 0 };
for (int i = 0; i < n; i++)
{
cin >> a[i][0];
cin >> a[i][1];
}
int m;
cin >> m;
int f = 0;
int ff = 0;
int b[10000][2] = { 0 };
for (int i = 0; i < m; i++)
{
cin >> b[i][0];
cin >> b[i][1];
}
int c[10000][2];
int k = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
c[k][0] = a[i][0] * b[j][0];
c[k++][1] = a[i][1] + b[j][1];
}
}
for (int i = 1; i < k; i++)
{
for (int j = 0; j < k - i; j++)
{
if (c[j][1] < c[j + 1][1])
{
int temp = c[j][1];
c[j][1] = c[j + 1][1];
c[j + 1][1] = temp;
int ttemp = c[j][0];
c[j][0] = c[j + 1][0];
c[j + 1][0] = ttemp;
}
else if (c[j][1] == c[j + 1][1])
{
c[j + 1][0] = c[j][0] + c[j + 1][0];
c[j][0] = 0;
}
}
}
for (int i = 0; i < k; i++)
{
if (c[i][0])
{
if (i)
cout << " ";
cout << c[i][0] << " ";
cout << c[i][1];
f = 1;
}
}
if (f == 0)
cout << "0 0";
cout << endl;
int d[1000][2];
int kk = 0;
int i = 0;
int j = 0;
while (a[i][0] && b[j][0])
{
if (a[i][1] == b[j][1])
{
d[kk][0] = a[i][0] + b[j][0];
d[kk++][1] = a[i][1];
i++;
j++;
}
else if (a[i][1] > b[j][1])
{
d[kk][0] = a[i][0];
d[kk++][1] = a[i][1];
i++;
}
else if (a[i][1] < b[j][1])
{
d[kk][0] = b[j][0];
d[kk++][1] = b[j][1];
j++;
}
}
while (b[j][0])
{
d[kk][0] = b[j][0];
d[kk++][1] = b[j++][1];
}
while (a[i][0])
{
d[kk][0] = a[i][0];
d[kk++][1] = a[i++][1];
}
for (int i = 0; i < kk; i++)
{
if (d[i][0])
{
if (i)
cout << " ";
cout << d[i][0] << " ";
cout << d[i][1];
ff = 1;
}
}
if (ff == 0)
cout << "0 0";
}
有许多零零碎碎的易错点,感觉没有用到数据结构与算法的知识,等着以后改进修改吧 ~