#include"iostream" #include"stdio.h" #include"string.h" #include"algorithm" #include"queue" #include"stack" #include"ctype.h" #include"cmath" #define mx 1005 using namespace std; struct poly //链表节点数据类型 { double ceof;//系数 int exp;//指数 poly *next; }; double A[mx],B[mx];//存放A和B表达式 int adegree,bdegree,maxexp;//存放最高阶数 void init(poly *&pl) //链表初始化 { pl=new poly;//动态分配空间,如果出现错误则输出 allocate error if(pl==NULL){cout<<"allocate error!"<<endl;} else { pl->next=NULL; } } void input(poly *&pl,int degree,double X[]) //表达式的输入(存入链表中) { poly *t=pl; int i=0; while(i<=degree) { if(X[i]!=0) //系数为零的不用存 { t->next=new poly; t=t->next; t->ceof=X[i]; t->exp=i; } i++; } t->next=NULL; } void output(poly *&pl) //表达式的输出 { poly *t=pl->next; cout<<"the polynomal is:"; bool h=true; while(t!=NULL) { if(!h&&t->exp>0.0) cout<<"+"; h=false; cout<<t->ceof; switch(t->exp) //根据阶数输出相应的项 { case 0:break; case 1:cout<<"x";break; default:cout<<"x^"<<t->exp; } t=t->next; } cout<<endl; } void mul_poly(poly *&pla,poly *&plb,poly *&plc) //实现表达式相乘 { double result[mx];//用来记录量表达式相乘后的得到的表达式的系数 poly *ta,*tb; int i,k; if(adegree!=-1||bdegree!=-1) //考虑0多项式的情况 { maxexp=adegree+bdegree; for(i=0;i<maxexp;i++) result[i]=0.0; ta=pla->next; while(ta!=NULL) { tb=plb->next; while(tb!=NULL) { k=ta->exp+tb->exp; result[k]+=(ta->ceof)*(tb->ceof); tb=tb->next; } ta=ta->next; } input(plc,maxexp,result); } } int main() { poly *pla,*plb,*plc; int i,j,_exp; double _ceof; char ch; int case_=0; while(++case_) { cout<<"case "<<case_<<":"<<endl; memset(A,0,sizeof(A)); memset(B,0,sizeof(B)); init(pla);//初始化,这个操作一定要有 init(plb); init(plc); ch=‘0‘; cout<<"input A poly:"; while(ch!=‘\n‘)//A表达式的输入 { cin>>_ceof; getchar();getchar(); cin>>_exp; ch=getchar(); A[_exp]=_ceof; adegree=_exp; } input(pla,adegree,A); cout<<"input B poly:"; ch=‘0‘; while(ch!=‘\n‘)//B表达式的输入 { cin>>_ceof; getchar();getchar(); cin>>_exp; ch=getchar(); B[_exp]=_ceof; bdegree=_exp; } input(plb,bdegree,B); mul_poly(pla,plb,plc); output(plc);//输出最终结果 cout<<endl; } return 0; }
时间: 2024-10-11 12:35:07