思路
模拟题,解算法题目不需要像MOOC里面那样现场搞一个链表,这样时间会比较慢。
所以我直接开了数组,用数组的下标代表指数,数组元素存储的即是系数。
AC代码
#include<iostream>
const int N=10100;
int duoxiangshi1[N];
int duoxiangshi2[N];
int resultChen[N];
int resultJia[N];
using namespace std;
int main(){
int n,temp1,temp2;
cin>>n;
//读取第一个多项式
for(int i=0;i<n;i++){
cin>>temp1>>temp2;
duoxiangshi1[temp2]=temp1;
}
//读取第二个多项式
cin>>n;
for(int i=0;i<n;i++){
cin>>temp1>>temp2;
duoxiangshi2[temp2]=temp1;
}
//开始计算乘法
for(int i=0;i<N;i++){
if(duoxiangshi1[i]!=0){
for(int j=0;j<N;j++){
if(duoxiangshi2[j]!=0){
resultChen[i+j]+=duoxiangshi1[i]*duoxiangshi2[j];
//注意这里是+=
}
}
}
}
int cnt=0;//用于判断是不是输出的第一个二元组,如果是,那么行首不输出空格
for(int i=N-1;i>=0;i--){
if(resultChen[i]!=0){
cnt++;
if(cnt==1){
cout<<resultChen[i]<<" "<<i;
}
else if(cnt>1){
//这样可以保证最后一个二元组后面没有空格
cout<<" "<<resultChen[i]<<" "<<i;
}
}
}
if(cnt==0){
cout<<"0 0";
}
cout<<endl;
//开始计算加法
for(int i=N-1;i>=0;i--){
resultJia[i]=duoxiangshi1[i]+duoxiangshi2[i];
}
cnt=0;
for(int i=N-1;i>=0;i--){
if(resultJia[i]!=0){
cnt++;
if(cnt==1){
cout<<resultJia[i]<<" "<<i;
}
else if(cnt>1){
cout<<" "<<resultJia[i]<<" "<<i;
}
}
}
if(cnt==0){
cout<<"0 0";
}
return 0;
}
注意事项
- 注意读题,处理行末空格
- 注意读题,处理0多项式的输出结果