1.题目
2.代码
#include <iostream>
using namespace std;
int main(){
int size1;
double res[1003000] = {0};
cin>>size1;
double res1[size1][2];
for(int i=0; i<size1;i++){
cin>>res1[i][0]; //指数
cin>>res1[i][1]; //系数
}
int size2;
cin>>size2;
for(int i=0; i<size2;i++){
int index2;
double res2;
cin>>index2;
cin>>res2;
for(int j=0;j<size1;j++){
//cout<<"res2:"<<res2<<endl;
//cout<<"res1[j][1]:"<<res1[j][1]<<endl;
res[int(res1[j][0]) + index2] += (res2*res1[j][1]);
}
}
int count = 0;
for(int i=0; i<1003000;i++){
if(res[i] != 0){
count++;
}
}
cout<<count<<" ";
int countres = 0;
for(int i=1002999; i>=0;i--){
if(res[i] != 0){
countres++;
if(countres == count){
printf("%d %.1f\n", i, res[i]);
}else{
printf("%d %.1f ", i, res[i]);
}
}
}
return 0;
}
3.解题思路
题目要求计算两个多项式的乘积。本题的解决方法依然是开数组进行存储。
首先,通过第一个输入得到第一个多项式的大小,开一个二维数组,第一位用来存储指数,第二位用来存储系数。
在得到第一个二维数组后,我们在后面的计算中将其作为计算的基底。同时,我们开一个大小为1003000(10011001)的一维数组用来存储乘积的结果。
逐个读入第二个多项式的数据,我们每一次读入一个指数和一个系数。并将读入的数据与定义的二维数组里的所有值进行乘积运算,并累加到结果的一维数组中。循环结束我们就可以得到乘积的结果。
遍历结果数组得到多项式的不同指数个数,并在此通过循环逐个输出。
注意点:
1.最后结果输出时逆序输出。
2.注意二维数组的变量类型是double。
3.注意计算结果的公式res[index1+index2] += (res[index1] + res[index2])。
4.结果数组的大小为10011001 = 1003000。