A1009 Product of Polynomials (25)(25 分)

A1009 Product of Polynomials (25)(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 N1 a~N1~ N2 a~N2~ ... NK a~NK~, where K is the number of nonzero terms in the polynomial, Ni and a~Ni~ (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门课,不应该那么烂的。

最高幂次数是2000,因为最大情况是1000*1000。

另外全局变量初始化不赋值,c语言默认处理为0啊,那么养成初始化赋值的习惯是极好的。

【c语言问题系列教程之一】变量声明和初始化 - CSDN博客 https://blog.csdn.net/mylinchi/article/details/52652595

C语言中全局变量初始化的重要性!!! - CSDN博客 https://blog.csdn.net/macrohasdefined/article/details/8814804

AC代码

#include<stdio.h>
struct Poly{
	int exp;
	double cof;
}poly[1001];//幂次数决定个数,正如数组下标是幂次数一样 
double ans[2005]={0};//存放结果 
int main(){
	int n,m,number=0;
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		scanf("%d %lf",&poly[i].exp ,&poly[i].cof );
	}//读入第一个多项式 
	scanf("%d",&m);
	for(int i=0;i<m;i++){
		int exp;
		double cof;
		scanf("%d %lf",&exp,&cof);//读入第二个多项式的一项 
		for(int j=0;j<n;j++){
			ans[exp+poly[j].exp]+=(cof*poly[j].cof);//这个写法从A1042起步 
		} 	
	} 
	for(int i=0;i<=2000;i++){//这里漏掉一个最高幂次数2000,就有两个测试点过不去 
		if(ans[i] !=0.0) number++;
	} 
	printf("%d", number);
	for(int i=2000;i>=0;i--){
		if(ans[i] !=0.0){
			printf(" %d %.1f",i ,ans[i]);//输出控制要注意 
		}
	}
	return 0;
} 
原文地址:https://www.cnblogs.com/lingr7/p/9389375.html