1009 Product of Polynomials (25分)
This time, you are supposed to find A×B where A and B are two polynomials.
Input Specification:
Each input file contains one test case. Each case occupies 2 lines, and each line contains the information of a polynomial:K N1aN1N2aN2… NKaNK
where K is the number of nonzero terms in the polynomial, Niand aNi
(i=1,2,⋯,K) are the exponents and coefficients, respectively. It is given that 1≤K≤10, 0≤N
K<⋯<N2<N1≤1000.
Output Specification:
For each test case you should output the product of A and B in one line, with the same format as the input. Notice that there must be NO extra space at the end of each line. Please be accurate up to 1 decimal place.
Sample Input:
2 1 2.4 0 3.2
2 2 1.5 1 0.5
Sample Output:
3 3 3.6 2 6.0 1 1.6
心得
在设置函数数组的时候,一定要看清楚范围,原来的范围是1000,二个的范围就是2000,数组设置的一定要够大,这个题说的是多项式想乘,然后有指数(exponents)和系数(coefficients)。最后需要倒叙输出。
错误
数组范围定义错,导致后三个点都跑不过去
#include <iostream>
#include <vector>
#include<iomanip>
using namespace std;
typedef struct {
int index;
double number;
}Poly;
vector<Poly>A;
vector<Poly>B;
int main() {
int K;
cin >> K;
for (int i = 0; i < K; i++)
{
Poly poly;
cin >> poly.index >> poly.number;
A.push_back(poly);
}
cin >> K;
for (int i = 0; i < K; i++)
{
Poly poly;
cin >> poly.index >> poly.number;
B.push_back(poly);
}
double mul[2010] = {0.0};
for (int i = 0; i < A.size(); i++)
{
for (int j = 0; j < B.size(); j++)
{
int index = A[i].index + B[j].index;
double number = A[i].number * B[j].number;
mul[index] += number;
}
}
int num1 = 0;
for (int i = 2009; i > -1; i--)
{
if (mul[i] != 0.0) {
num1 += 1;
}
}
cout << num1;
for (int i = 2009; i > -1; i--)
{
if (mul[i] != 0.0) {
cout <<" " <<i<<" "<<fixed<<setprecision(1)<<mul[i];
}
}
return 0;
}