为了实现方便,这里默认多项式项数据是按照指数递增的顺序输入的,默认两多项式相乘后最大的指数小于1000
#include <iostream>
#include <cmath>
using namespace std;
struct Node{
float cofe;
int exp;
Node *next;
Node(float c,int e,Node *ne=NULL){
cofe=c;
exp=e;
next=ne;
}
Node *InsertAfter(float c,int e);
friend ostream& operator<<(ostream&,const Node&);
};
Node *Node::InsertAfter(float c,int e){
next=new Node(c,e);
return next;
}
std::ostream& operator<<(ostream& out,Node& x){
if(x.cofe==0)return out;
out<<x.cofe;
switch(x.exp){
case 0:break;
case 1:out<<"X";break;
default:out<<"X^"<<x.exp;break;
}
return out;
}
int main(){
Node *p;
Node *q;
Node first(0,-1);
Node first2(0,-1);
p=&first;
q=&first2;
int N;//输入多项式有多少项
int M;
cin>>N;
float inputc;
int inpute;
int maxorder1,maxorder2;
for(int i=0;i<N;i++){
cin>>inputc>>inpute;
if(i==N-1){
maxorder1=inpute;
}
p=p->InsertAfter(inputc,inpute);
}
cin>>M;//输入第二个多项式有多少项
for(int i=0;i<M;i++){
cin>>inputc>>inpute;
if(i==M-1){
maxorder2=inpute;
}
q=q->InsertAfter(inputc,inpute);
}
p=first.next;
q=first2.next;
Node result(0,-1);
Node *r=&result;
if(maxorder1!=-1||maxorder2!=-1){
int maxorder=maxorder1+maxorder2;//计算出最大指数
for(int i=0;i<=maxorder;i++){
r=r->InsertAfter(0,i);
}
int temp[1000];
for(int i=0;i<1000;i++){
temp[i]=0;
}
while(p!=NULL){
q=first2.next;
while(q!=NULL){
int tempc=p->cofe*q->cofe;
int tempe=p->exp+q->exp;
temp[tempe]+=tempc;
q=q->next;
}
p=p->next;
}
r=result.next;
for(int i=0;i<=maxorder;i++){
r->cofe+=temp[i];
r=r->next;
}
}
r=result.next;
while(r!=NULL){
if(r->cofe!=0){
std::cout<<*r;
if(r->next!=NULL){
if(r->next->cofe>0){
cout<<"+";
}
}
}
r=r->next;
}
return 0;
}