A1009.Product of Polynomials(25)

自己的代码

#include<cstdio>
double A[1001]={0},B[1001]={0};
const int N=5;
int main(){
	int n1,n2,k1,k2,max=0,count=0;
	double temp1,temp2;
	scanf("%d",&n1);
	for(int i=0;i<n1;i++){
		scanf("%d %lf",&k1,&temp1);
		A[k1]=temp1;
	}
	scanf("%d",&n2);
	for(int i=0;i<n2;i++){
		scanf("%d %lf",&k2,&temp2);
		for(int i=0;i<N;i++){
			if(A[i]!=0){
				B[k2+i]+=temp2*A[i];
			}
			 
		}
	}
	for(int i=N;i>=0;i--){
		if(B[i]) count++;
	}
	printf("%d",count);
	for(int i=N;i>=0;i--){
		if(B[i]){
			printf(" %d %.1f",i,B[i]);
		} 
	}	
} 

参考代码

#include <cstdio>
struct Poly{
	int exp;//指数
	double cof;//系数 
}poly[1001];
double ans[2001];//存放结果 
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); 
		} 
	}
	for(int i=0;i<=2000;i++){
		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;
}

分析:

1,又犯了和A+BPoly一样的问题,这里相乘的两个多项式最高次幂最高是2000,没有考虑全

2,这里我原来想法是定义max存放最高次幂,这样就不用每次从2000,向下循环输出,节省时间,但是这里的问题是,在每次第二个多项式与第一个多项式相乘的过程中会产生新的高次幂多项式,比较下去太麻烦,到头来又花了空间,时间也没有节省多少。

3,参考代码中值得借鉴的是结构体的定义,还有适当英文的使用,这是编程的良好习惯。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值