1009. Product of Polynomials (25)
题目地址:1009. Product of Polynomials (25)
题目描述:
This time, you are supposed to find A*B where A and B are two polynomials.
输入格式:
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.输出格式:
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.
解题方法:
这里可以用一个结构首先存储A多项式的信息,然后接下来输入B,每输一B的一项,就计算他与A的乘积,并把结果保存到map里面去,其中key是指数,value是系数
易错点:
这里需要注意的一点就是,可能在合并同类项的时候,出现了系数抵消为0的情况,这样的话就需要在进行一次判断,把那些系数不为0的结果才输出。
程序:
#include <stdio.h>
#include <map>
using namespace std;
struct P
{
int expon;
double coef;
}A[10];
int main(int argc, char const *argv[])
{
int k, expon, i;
double coef;
map <int, double> PolyNomial; /* 以指数为键,系数为值 */
scanf("%d", &k);
for (i = 0; i < k; i++) /* i记录A有多少项 */
scanf("%d %lf", &A[i].expon, &A[i].coef);
scanf("%d", &k);
for (int j = 0; j < k; j++)
{ /* 每输入一个,就与原来的多项式进行一次乘法 */
scanf("%d %lf", &expon, &coef);
for (int n = 0; n < i; n++)
PolyNomial[expon + A[n].expon] += coef * A[n].coef;
}
int len = PolyNomial.size();
map<int, double>:: reverse_iterator it;
for (it = PolyNomial.rbegin(); it != PolyNomial.rend(); it++)
if (it->second == 0) /* 如果系数为0 */
len--;
printf("%d", len);
for (it = PolyNomial.rbegin(); it != PolyNomial.rend(); it++)
if (it->second != 0) /* 打印结果 */
printf(" %d %.1lf", it->first, it->second);
return 0;
}