设计函数分别求两个一元多项式的乘积与和。
输入格式:
输入分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
结构体数组方法
提示:
在不断改进优化代码的过程中,多设计几组典型测试数据很重要。
```
第一 0 0 第二 0 1 1 1 第三 1 -1 1 1 1 1 第四 2 2 2 1 1 2 -2 2 -1 1 第五 2 2 2 1 1 2 2 2 -1 1 第六 2 2 2 1 1 2 -2 2 1 1
```
#include <bits/stdc++.h>
using namespace std;
struct asd
{
int xi;
int zhi;
int f; //用于判断是否相加过
};
int arr[2005]; //乘积结果
int h[2005]; //求和结果
int main()
{
int n;
cin >> n;
struct asd a1[n];
for (int i = 0; i < n; i++)
{
cin >> a1[i].xi >> a1[i].zhi;
a1[i].f = 0; //初始化表示还未进行相加运算
}
int m;
cin >> m;
struct asd a2[m];
for (int i = 0; i < m; i++)
{
cin >> a2[i].xi >> a2[i].zhi;
a2[i].f = 0;
}
int t = 0;//控制输出空格
if (n == 0 || m == 0) //乘积运算
{
cout << "0 0";
}
else
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
arr[a1[i].zhi + a2[j].zhi] += (a1[i].xi * a2[j].xi); //指数相加,系数相乘
}
}
for (int i = 2005; i >= 0; i--) //输出
{
if (t == 0 && arr[i] != 0) //系数非零情况下输出
{
cout << arr[i] << " " << i;
t = 1;
}
else if (t != 0 && arr[i] != 0)
{
cout << " " << arr[i] << " " << i;
}
}
}
cout << "\n";
t = 0;
int f = 1; //判断求和运算过程中是否有数据输出,没有就输出"0 0"
if (n == 0 && m == 0) //求和运算
{
cout << "0 0";
}
else
{
for (int i = 0; i < n; i++) //指数相同的系数相加
{
h[a1[i].zhi] += a1[i].xi;
}
for (int i = 0; i < m; i++)
{
h[a2[i].zhi] += a2[i].xi;
}
for (int i = 2005; i >= 0; i--)
{
if (t == 0 && h[i] != 0)//系数为零时不会输出,所以当只有一项且系数为0时要用f来特判
{
cout << h[i] << " " << i;
t = 1;
f = 0;
}
else if (t != 0 && h[i] != 0)
{
cout << " " << h[i] << " " << i;
}
}
if (f) //没有数据输出,输出"0 0"
{
cout << "0 0";
}
}
}
链表方法
以后补上