一元n次多项式的处理

xiaoxiao2021-02-28  127

实现的功能

1.多项式的创建

2.多项式的求导

3.多项式的输出

4.两个多项式的加法

5.两个多项式的减法

6.两个多项式的乘法

#include <iostream> #include<cmath> using namespace std; int num1=0; int num2=0; struct LinkNode1 { int xs; int exp; int flag; LinkNode1 *next; }; struct LinkNode2 { int xs; int exp; int flag; LinkNode2 *next; }; void insert(LinkNode1 *&head,int xs1,int exp1) { num1++; LinkNode1 *p=new LinkNode1; LinkNode1 *q=head; p->xs=xs1; p->exp=exp1; p->flag=0; p->next=NULL; if(head==NULL) { head=p; } else { p->next=q->next; q->next=p; } } void insert(LinkNode2 *&head,int xs1,int exp1) { num2++; LinkNode2 *p=new LinkNode2; LinkNode2 *q=head; p->xs=xs1; p->exp=exp1; p->flag=0; p->next=NULL; if(head==NULL) { head=p; } else { p->next=q->next; q->next=p; } } void show(LinkNode1 *&head) { LinkNode1 *p=head; while(p) { cout<<"+"<<p->xs<<"x"<<p->exp; p=p->next; } cout<<endl; } void show(LinkNode2 *&head) { LinkNode2 *p=head; while(p) { cout<<"+"<<p->xs<<"x"<<p->exp; p=p->next; } cout<<endl; } void getvalue(LinkNode1 *&head) { LinkNode1 *p=head; double x=0,sum=0; cout<<"请输入x的值"<<endl; cin>>x; while(p!=NULL) { sum=sum+p->xs*pow(x,p->exp); p=p->next; } cout<<"多项式的值是"<<sum<<endl; } void getvalue(LinkNode2 *&head) { LinkNode2 *p=head; double x=0,sum=0; cout<<"请输入x的值"<<endl; cin>>x; while(p!=NULL) { sum=sum+p->xs*pow(x,p->exp); p=p->next; } cout<<"多项式的值是"<<sum<<endl; } void getderiva(LinkNode1 *&head) { cout<<"第一个多项式的导数是"<<endl; LinkNode1 *p=head; while(p!=NULL) { cout<<"+"<<p->exp*p->xs<<"x"<<p->exp-1; p=p->next; } cout<<endl; } void getderiva(LinkNode2 *&head) { cout<<"第一个多项式的导数是"<<endl; LinkNode2 *p=head; while(p!=NULL) { cout<<"+"<<p->exp*p->xs<<"x"<<p->exp-1; p=p->next; } cout<<endl; } void add(LinkNode1 *&head1,LinkNode2 *&head2) { cout<<"相加的结果"<<endl; LinkNode1 *p=head1; LinkNode2 *q=head2; int s1=num1; int s2=num2; int d1[s1][2]; int d2[s2][2]; int i=0; while(p!=NULL) { d1[i][0]=p->xs; d1[i][1]=p->exp; i++; p=p->next; } i=0; while(q!=NULL) { d2[i][0]=q->xs; d2[i][1]=q->exp; i++; q=q->next; } for(int j=0;j<s1;j++) { for(int k=0;k<s2;k++) { if(d2[k][0]!=0&&d1[j][1]==d2[k][1]) { d1[j][0]=d1[j][0]+d2[k][0]; d2[k][0]=0; } } } for(int j=0;j<s1;j++) { cout<<"+"<<d1[j][0]<<"x"<<d1[j][1]; } for(int j=0;j<s2;j++) { if(d2[j][0]!=0) { cout<<"+"<<d2[j][0]<<"x"<<d2[j][1]; } } cout<<endl; } void sub(LinkNode1 *&head1,LinkNode2 *&head2) { cout<<"相减的结果"<<endl; LinkNode1 *p=head1; LinkNode2 *q=head2; int s1=num1; int s2=num2; int d1[s1][2]; int d2[s2][2]; int i=0; while(p!=NULL) { d1[i][0]=p->xs; d1[i][1]=p->exp; i++; p=p->next; } i=0; while(q!=NULL) { d2[i][0]=q->xs; d2[i][1]=q->exp; i++; q=q->next; } for(int j=0;j<s1;j++) { for(int k=0;k<s2;k++) { if(d2[k][0]!=0&&d1[j][1]==d2[k][1]) { d1[j][0]=d1[j][0]-d2[k][0]; d2[k][0]=0; } } } for(int j=0;j<s1;j++) { cout<<"+"<<d1[j][0]<<"x"<<d1[j][1]; } for(int j=0;j<s2;j++) { if(d2[j][0]!=0) { cout<<"+"<<d2[j][0]<<"x"<<d2[j][1]; } } cout<<endl; } void mul(LinkNode1 *&head1,LinkNode2 *&head2) { cout<<"相乘的结果"<<endl; int s=num1*num2; int d[s][2]; LinkNode1 *p=head1; LinkNode2 *q=head2; int i=0; while(p!=NULL) { q=head2; while(q!=NULL) { d[i][0]=(p->xs)*(q->xs); d[i][1]=(p->exp)+(q->exp); i++; q=q->next; } p=p->next; } for(int j=0; j<s; j++) { for(int k=j+1; k<s; k++) { if(d[j][1]==d[k][1]) { d[j][0]=d[k][0]+d[j][0]; d[k][0]=0; } } } for(int j=0;j<s;j++) { if(d[j][0]!=0) { cout<<"+"<<d[j][0]<<"x"<<d[j][1]; } } cout<<endl; } int main() { int xs1,exp1; LinkNode1 *head1=NULL; LinkNode2 *head2=NULL; cout<<"输入0 0代表输入结束"<<endl; cout<<"请输入第一个多项式"<<endl; while(1) { cin>>xs1>>exp1; if(xs1==0&&exp1==0) break; insert(head1,xs1,exp1); } cout<<"请输入第二个多项式"<<endl; while(1) { cin>>xs1>>exp1; if(xs1==0&&exp1==0) break; insert(head2,xs1,exp1); } cout<<num1<<num2<<"WWw"<<endl; show(head1); show(head2); getvalue(head1); getvalue(head2); getderiva(head1); getderiva(head2); add(head1,head2); sub(head1,head2); mul(head1,head2); return 0; }

转载请注明原文地址: https://www.6miu.com/read-21184.html

最新回复(0)