一、多项式的加法
算法思路:开一个double 型数组,数组下标表示多项式的指数,在输入时对数组值进行加减
算法代码:
#include <cstdio>
const int maxn = 1010;
double p[maxn] = {0};
int main(){
int k,n,count=0;
double a;
scanf("%d",&k);
for(int i=0;i<k;i++){
scanf("%d %lf",&n,&a);
p[n] += a;
}
scanf("%d",&k);
for(int i=0;i<k;i++){
scanf("%d %lf",&n,&a);
p[n] += a;
}
//判断有多少个有效指数项
for(int i=0; i<maxn;i++){
if(p[i]!=0) count++;
}
printf("%d",count);
for(int i=maxn-1; i>=0;i--){
if(p[i]!=0) printf(" %d %.1lf",i,p[i]);
}
return 0;
}
二、多项式的乘法
算法思路:开一个结构体数组,第一次输入数组A,第二次输入数组时,每一项都与数组A中的项指数相加,系数相乘
算法代码:
#include <cstdio>
struct Poly{
int exp;
double cof;
}poly[1010];
double ans[2010] = {0};
int main(){
int k,n,count=0;
scanf("%d",&k);
for(int i=0;i<k;i++){
scanf("%d %lf",&poly[i].exp,&poly[i].cof);
}
scanf("%d",&n);
for(int i=0;i<n;i++){
int exp;
double cof;
scanf("%d %lf",&exp,&cof);
for(int j=0; j<k;j++){
ans[exp+poly[j].exp] += cof * poly[j].cof;
}
}
for(int i=0; i<2010;i++){
if(ans[i]!= 0.0) count++;
}
printf("%d",count);
for(int i=2000; i>=0;i--){
if(ans[i]!=0.0) printf(" %d %.1lf",i,ans[i]);
}
return 0;
}