自己的代码
#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,参考代码中值得借鉴的是结构体的定义,还有适当英文的使用,这是编程的良好习惯。