知道两个多项式相乘的规则,同时注意边界,题目给的是0-1000之间,因此开的数组必须大于1001.
#include<cstdio>
#include<algorithm>
using namespace std;
int main(){
int n1, n2, temp;
double ex1[1010] = {0}, ex2[1010] = {0}, ex3[2020] = {0};//注意ex3,要大于2002
double temp1;
scanf("%d", &n1);
for(int i = 0; i < n1; i++){
scanf("%d%lf", &temp, &temp1);
ex1[temp] = temp1;
}
scanf("%d", &n2);
for(int i = 0; i < n2; i++){
scanf("%d%lf", &temp, &temp1);
ex2[temp] = temp1;
}
for(int i = 0; i < 1001; i++){//注意必须大于等于1001才行!!
for(int j = 0; j < 1001; j++){
ex3[i + j] += ex1[i] * ex2[j];
}
}
int num = 0;
for(int i = 2010; i >= 0; i--){
if(ex3[i] != 0){
num++;
}
}
printf("%d", num);
for(int i = 2010; i >= 0; i--){
if(ex3[i] != 0){//保留一位小数
printf(" %d %.1f", i, ex3[i]);
}
}
return 0;
}