题目描述
英文
中文大意
输入两个多项式,按格式输出这两个多项式的乘积
第一位都代表 多项式中非零项的个数
如 2 1 2.4 0 3.2
表示 2.4x + 3.2
其中 指数K
的范围在 [1,10]
,系数N
的范围在 [0, 1000]
同样的精确到小数点后1
位
样例
思路分析
类似于1002 A+B 思路可以仿照它
按照规定的思路走,其实还是暴力法
需要注意的点:
cnt
计数需要单独遍历一遍- 注意输出的是 非零项
- 这道题目也可以用
map
不过1002用了这里就用常规的方法吧,万一以后上机不让用map
不是傻*了
code
#include <iostream>
#define MaxSize 1001
using namespace std;
int main(){
double a[MaxSize] = {0};
double b[MaxSize] = {0};
double res[2 * MaxSize - 1] = {0};
int num;
cin >> num;
for (int i = 0;i < num;i++) {
int k;
double n;
cin >> k >> n;
a[k] = n;
}
cin >> num;
for (int i = 0;i < num;i++) {
int k;
double n;
cin >> k >> n;
b[k] = n;
}
// 指数从1开始
for (int i = 0;i < MaxSize;i++) {
for (int j = 0;j < MaxSize;j++) {
res[i+j] += a[i] * b[j];
}
}
// 非零项计数
int cnt = 0;
// 格式化输出
for (int i = 0;i < 2*MaxSize-1;i++) {
if (res[i] != 0.0) cnt++;
}
cout << cnt;
if (cnt == 0) return 0;
for (int i = 2*MaxSize-2;i >= 0;i--) {
if (res[i] != 0) printf(" %d %.1lf", i, res[i]);
}
return 0;
}