注意点:
把两个多项式每一项分别相乘,然后每一项结果用一个插入排序放入到一个序列中去。注意几项次数相同的相加为零的情况。
代码:
#include<iostream>
#include<iomanip>
using namespace std;
struct Elem
{
double co;
int ex;
};
int main()
{
struct Elem a[20], b[20], c[200];
int i, j, k, l, n1, n2;
int ex1, length, num;
double co1;
cin >> n1;
for (i = 0; i < n1; i++)
cin >> a[i].ex >> a[i].co;
cin >> n2;
for (i = 0; i < n2; i++)
cin >> b[i].ex >> b[i].co;
length = 0;
for (i = 0; i < 200; i++)
c[i].ex = -1;
for (i = 0; i < n1; i++)
for (j = 0; j < n2; j++)
{
ex1 = a[i].ex + b[j].ex;
co1 = a[i].co*b[j].co;
if (length == 0)
{
c[0].ex = ex1;
c[0].co = co1;
length++;
}
else
{
l = 0;
while (c[l].ex > ex1)
l++;
if (c[l].ex == ex1)
{
c[l].co += co1;
}
else
{
for (k = length; k > l; k--)
c[k] = c[k - 1];
c[l].ex = ex1;
c[l].co = co1;
length++;
}
}
}
num = 0;
for (i = 0; i < length; i++)
if (c[i].co > 0.01 || c[i].co < -0.01)
num++;
cout << num;
cout.setf(ios::fixed);
for (i = 0; i < length; i++)
if (c[i].co > 0.01 || c[i].co < -0.01)
{
cout << " " << c[i].ex;
cout << fixed << setprecision(1) << " " << c[i].co;
}
cout << endl;
return 0;
}