- #include<iostream>
- #include<malloc.h>
- #include<stdlib.h>
- using namespace std;
- #define OK 1
- #define ERROR 0
- #define OVERFLOW -2
- typedef struct polyn
- {
- float coef;
- int expn;
- struct polyn *next;
- }Elem,*polynomial;
- void CreatPolyn(polynomial &p,int n) //创建多项式
- {
- p=(polynomial)malloc(sizeof(Elem));
- p->expn=-1;
- p->next=NULL;
- polynomial q=p,r;
- for(int i=0;i<n;i++)
- {
- q=(polynomial)malloc(sizeof(Elem));
- cin>>q->coef>>q->expn;
- if(!i) {p->next=q;r=q;}
- else {r->next=q;r=q;}
- }
- q->next=NULL;
- }
- void Sort(polynomial &p,int n) //排序
- {
- polynomial q,r,t;
- int j;
- bool change=true;
- for(int i=n-1;i>0&&change;i--)
- {
- change=false;
- for(r=p,q=p->next,j=0;q->next&&j<i;j++)
- if(q->expn>q->next->expn) {
- r->next=q->next;
- t=q->next->next;
- q->next->next=q;
- q->next=t;
- change=true;
- r=r->next;}
- else{r=q;q=q->next;}
- }
- }
- void PrintPolyn(polynomial p) //输出
- {
- while(p=p->next)
- cout<<p->coef<<" "<<p->expn<<endl;
- cout<<endl;
- }
- void AddPolyn(polynomial &La,polynomial &Lb) //加法
- {
- polynomial qa=La->next,qb=Lb->next,qqa=La,t;
- while(qa&&qb)
- { if(qb->expn>qa->expn) {qqa=qa;qa=qa->next;}
- else if(qb->expn<qa->expn) {
- qqa->next=qb;
- t=qb;
- qb=qb->next;
- t->next=qa;}
- else {
- qa->coef+=qb->coef;
- if(!qa->coef) {qqa->next=qa->next;
- free(qa);
- t=qb;
- qb=qb->next;
- free(t);
- qa=qqa->next;}
- else {qb=qb->next; qqa=qa;qa=qa->next;}
- }
- }
- if(!qa&&qb) qqa->next=qb;
- free(Lb);
- }
- void SubtractPolyn(polynomial &La,polynomial &Lb) //减法
- {
- polynomial qa=La->next,qb=Lb->next,qqa=La,t;
- while(qa&&qb)
- { if(qb->expn>qa->expn) {qqa=qa;qa=qa->next;}
- else if(qb->expn<qa->expn) {
- qb->coef=-qb->coef;
- qqa->next=qb;
- t=qb;
- qb=qb->next;
- t->next=qa;}
- else {
- qa->coef-=qb->coef;
- if(!qa->coef) {qqa->next=qa->next;
- free(qa);
- t=qb;
- qb=qb->next;
- free(t);
- qa=qqa->next;}
- else {qb=qb->next; qqa=qa;qa=qa->next;}
- }
- }
- if(!qa&&qb) {
- qqa->next=qb;
- while(qb)
- {
- qb->coef=-qb->coef;
- qb=qb->next; }
- }
- free(Lb);}
- void CopyPolyn(polynomial &La,polynomial &Lb) //复制
- {
- polynomial p,q,pp=La->next;
- Lb=(polynomial)malloc(sizeof(Elem));
- Lb->expn=-1;
- for(;pp;pp=pp->next)
- {
- p=(polynomial)malloc(sizeof(Elem));
- p->coef=pp->coef;
- p->expn=pp->expn;
- if(pp==La->next) {Lb->next=p;q=p;}
- else {q->next=p;q=p;}
- }
- p->next=NULL; }
- void InsertPolyn(polynomial &La,polynomial &e) //插入
- {
- polynomial pa=La,t;
- while(pa->next&&pa->next->expn<e->expn)
- pa=pa->next;
- if(!pa->next) {pa->next=e;e->next=NULL;}
- else if(pa->next->expn>e->expn) {
- e->next=pa->next;
- pa->next=e;
- }
- else if(pa->next->expn==e->expn) {
- pa->next->coef+=e->coef;
- if(!pa->next->coef)
- {
- t=pa->next;
- pa->next=pa->next->next;
- // free(t);
- }
- //free(e);
- }
- }
- void MultiplyPolyn(polynomial La,polynomial Lb,polynomial &Lc) //乘法
- {
- polynomial qa,qb=Lb,qq;
- Lc=(polynomial)malloc(sizeof(Elem));
- Lc->expn=-1;
- Lc->next=NULL;
- while(qb=qb->next)
- {
- for(qa=La->next;qa;qa=qa->next)
- {
- qq=(polynomial)malloc(sizeof(Elem));
- qq->coef=qa->coef*qb->coef;
- qq->expn=qa->expn+qb->expn;
- InsertPolyn(Lc,qq);}
- }
- }
- int main()
- {
- int np,nq;
- polynomial p,q,m,r,y;
- cin>>np;
- CreatPolyn(p,np);
- Sort(p,np);
- PrintPolyn(p);
- cin>>nq;
- CreatPolyn(q,nq);
- Sort(q,nq);
- PrintPolyn(q);
- CopyPolyn(q,r);
- PrintPolyn(r);
- CopyPolyn(q,y);
- PrintPolyn(y);
- AddPolyn(p,q);
- PrintPolyn(p);
- SubtractPolyn(p,r);
- PrintPolyn(p);
- MultiplyPolyn(p,y,m);
- PrintPolyn(m);
- return 0;
- }
- 3
- 2 1
- 3 0
- 1 3
- 3 0
- 2 1
- 1 3
- 2
- 1 4
- -2 1
- -2 1
- 1 4
- -2 1
- 1 4
- -2 1
- 1 4
- 3 0
- 1 3
- 1 4
- 3 0
- 2 1
- 1 3
- -6 1
- -4 2
- 1 4
- 2 5
- 1 7
- 请按任意键继续. . .
一元多项式运算
最新推荐文章于 2023-04-12 23:24:33 发布