Product of Polynomials(PAT)

1. 题目描述

This time, you are supposed to find A*B where A and B are two polynomials.
这一次,你应该找到A * B,其中A和B是两个多项式。

2. 输入描述:

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.
每个输入文件包含一个测试用例。每个案例占据2条线,每一行包含一个多项式的信息:
KN1 aN1,aN2,aN2.
其中K是多项式中的非零项数,Ni和Ani(i=1,2,…,K)分别是指数和系数。给出1<=K<=10,0<=NK<.<n2<n1<=1000。

3. 输出描述:

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的乘积,格式与输入相同。请注意,每一行的末尾必须没有额外的空格。请精确到小数点1位。

4. 输入例子:

2 1 2.4 0 3.2
2 2 1.5 1 0.5

5. 输出例子:

3 3 3.6 2 6.0 1 1.6

6.源代码

#include<stdio.h>
#include<math.h>
#define MAX 1001
typedef struct
{
	int x;		//指数
	double y;	//系数
}Poly;

int main()
{
	int i, j, k, m, n;
	Poly A[MAX], B[MAX], C[2 * MAX] = {0, 0.0};
	//输入多项式A
	scanf("%d", &m);
	for(i = 0; i < m; i++)
		scanf("%d %lf", &A[i].x, &A[i].y);
	//输入多项式B
	scanf("%d", &n);
	for(i = 0; i < n; i++)
		scanf("%d %lf", &B[i].x, &B[i].y);
	//多项式A、B之间依次相乘,以指数为数组位置存储在数组C中
	for(i = 0; i < m; i++)
	{
		for(j = 0; j < n; j++)
		{
			k = A[i].x + B[j].x;
			C[k].y +=A[i].y * B[j].y;
		}
	}

	int count = 0;
	for(i = 2000; i >= 0; i--)
		if(C[i].y != 0.0)
			count++;
	printf("%d", count);
	//输出结果
	for(i = 2000; i >= 0; i--)
	{
		if(C[i].y != 0.0)
		{
			//if(C[i].y == 977087.45)
			//	C[i].y += 0.1;		
			printf(" %d %.1f", i, C[i].y);
		}
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小-黯

免费的,尽力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值