1009. Product of Polynomials

xiaoxiao2021-02-28  52

Product of Polynomials

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 N1 aN1 N2 aN2 … NK aNK, where K is the number of nonzero terms in the polynomial, Ni and aNi (i=1, 2, …, K) are the exponents and coefficients, respectively. It is given that 1 <= K <= 10, 0 <= NK < … < 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

题意

多项式乘法。

思路

用3个double数组去记录多项式。需要注意的点有:

结果多项式的最大指数为2000,相应的要提高结果数组的容量;系数可能为负;更加规范的double类型比较,应当要设置一个精度再进行比较。

代码实现

#include <cstdio> double a[1001]; double b[1001]; double ans[2001]; int main() { int k, exp; double coe; int num = 0; // 统计系数非零项个数 scanf("%d", &k); for (int i = 0; i < k; i++) { scanf("%d %lf", &exp, &coe); a[exp] = coe; } scanf("%d", &k); for (int i = 0; i < k; i++) { scanf("%d %lf", &exp, &coe); b[exp] = coe; } for (int i = 0; i < 1001; i++) for (int j = 0; j < 1001; j++) ans[i + j] += a[i] * b[j]; // 注意这里是+=而不是= for (int i = 0; i < 2001; i++) if (ans[i] != 0) // 注意系数可能为负(图简便这里的比较并不规范) num++; printf("%d", num); for (int i = 2000; i >= 0; i--) if (ans[i] != 0) printf(" %d %.1f", i, ans[i]); return 0; }
转载请注明原文地址: https://www.6miu.com/read-2620442.html

最新回复(0)