设计函数分别求两个一元多项式的乘积与和。
输入格式:
输入分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 0。两个多项式为0,输出0 0\n0 0
代码:
#include <iostream>
using namespace std;
#define MAXN 1050
#define ANS_MAXN 2100
int main(){
int y1[MAXN] = {0}, y2[MAXN] = {0}, ans_add[ANS_MAXN] = {0}, ans_mult[ANS_MAXN] = {0};
int x1_cnt, x2_cnt;
cin >> x1_cnt;
//读取第一个多项式
for(int i = 0; i < x1_cnt; i++){
int _x, _xx;
cin >> _x >> _xx;
y1[_xx] += _x;
}
cin >> x2_cnt;
//读取第二个多项式
for(int i = 0; i < x2_cnt; i++){
int _x, _xx;
cin >> _x >> _xx;
y2[_xx] += _x;
}
//计算乘积
for(int i = 0; i < MAXN; i++){
for(int j = 0; j < MAXN; j++){
int _xx = i + j;
int _x = y1[i] * y2[j];
ans_mult[_xx] += _x;
}
}
//求和
for(int i = 0; i < MAXN; i++){
int _xx = i;
int _x = y1[i] + y2[i];
ans_add[_xx] += _x;
}
bool flag = true;
//输出乘积结果
for(int i = ANS_MAXN - 1; i >= 0; i--){
if(ans_mult[i]){
if(flag)
flag = false;
else
cout << ' ';
cout << ans_mult[i] << ' ' << i;
}
}
if(flag) cout << "0 0";
cout << endl;
flag = true;
for(int i = ANS_MAXN - 1; i >= 0; i--){
if(ans_add[i]){
if(flag)
flag = false;
else
cout << ' ';
cout << ans_add[i] << ' ' << i;
}
}
if(flag) cout << "0 0";
return 0;
}