题目分析:简单的多项式的模拟乘法,你可以假设未知数为x,exp为x的指数,coe为x的系数,则很容易就把答案推算出来,注意答案是从指数的高往低输出,同时要注意的是这是多项式的乘法,虽然指数的范围只有0~1000,但是乘法结果的指数范围为0~2000,注意数组定义的范围,开小了会产生段错误(下标越界,访问了不该访问的内存)

 #include<iostream>
using namespace std; struct Node{
int exp; //指数
double coe; //系数
}k[], a[], b[]; //对于k数组来说下标即对应指数 所以exp对于k数组来说其实是多余的 //初始化结构体数组
void init(){
for(int i = ; i <= ; i++){
a[i].exp = ;
a[i].coe = ;
b[i].exp = ;
b[i].coe = ;
}
for(int i = ; i <= ; i++){
k[i].exp = ;
k[i].coe = ;
}
} int main(){
int n1, n2;
while(scanf("%d", &n1) != EOF){
init();
for(int i = ; i <= n1; i++){
scanf("%d%lf", &a[i].exp, &a[i].coe);
}
scanf("%d", &n2);
for(int i = ; i <= n2; i++){
scanf("%d%lf", &b[i].exp, &b[i].coe);
}
for(int i = ; i <= n1; i++){
for(int j = ; j <= n2; j++){
//对a数组中的每一位都与b数组的每一位相乘,将结果存储到k数组中
//得到指数
int exp = a[i].exp + b[j].exp;
//得到系数
double coe = a[i].coe * b[j].coe;
k[exp].coe += coe;
}
}
//统计一遍有多少项是有意义的(系数不为0)
int num = ;
for(int i = ; i >= ; i--){
if(k[i].coe != ) num++;
}
printf("%d", num);
//从高位到低位输出都有的系数不为0的情况下的多项式的每一项
for(int i = ; i >= ; i--){
if(k[i].coe != ){
printf(" %d %0.1lf", i, k[i].coe);
}
}
printf("\n");
}
return ;
}
05-11 21:57