#include<iostream>
using namespace std;
struct Polynomial{
int coefficient;
int index;
Polynomial *next;
};
void Initial(Polynomial *&poly)
{
Polynomial *p,*q;
int x=0,y=0;
poly=(Polynomial *)malloc(sizeof(Polynomial));
poly->coefficient=0;
poly->index=0;
poly->next=NULL;
p=poly;
while (true)
{
cin>>x>>y;
if (x==0)
{
break;
}
q=(Polynomial *)malloc(sizeof(Polynomial));
q->coefficient=x;
q->index=y;
p->next=q;
q->next=NULL;
p=q;
}
}
void caculate(const Polynomial *polyA,const Polynomial *polyB,Polynomial *&polyC)
{
Polynomial *p,*q,*A,*B;
A=polyA->next;
polyC=(Polynomial *)malloc(sizeof(Polynomial));
polyC->coefficient=0;
polyC->index=0;
polyC->next=NULL;
p=polyC;
do {
B=NULL;
B=polyB->next;
do {
q=(Polynomial *)malloc(sizeof(Polynomial));
q->coefficient=A->coefficient*B->coefficient;
q->index=A->index+B->index;
q->next=NULL;
p->next=q;
p=q;
} while((B=B->next)!=NULL);
} while((A=A->next)!=NULL);
}
/*下面是对二项式进行合并
因为合并的项中,不只有
一种类型的项,有1次2次
等等,或者是更高的,所以
使用了两层循环
*/
void sort_out(Polynomial *&polyc)
{
Polynomial *p,*k;
p=polyc->next;
k=p;
do {
k=p;
do {
Polynomial *q;
q=k->next;
if (k->next==NULL)
{
break;
}
if(p->index==q->index)
{
p->coefficient=p->coefficient+q->coefficient;
k->next=q->next;
free(q);
continue;
}
} while((k=k->next)!=NULL);
} while((p=p->next)!=NULL);
}
void display(Polynomial *poly)
{
Polynomial *p;
p=poly->next;
do {
cout<<p->coefficient<<"x^"<<p->index;
if(p->next!=NULL)
cout<<"+";
} while((p=p->next)!=NULL);
cout<<endl;
}
int main(int argc,char **argv)
{
Polynomial *polynomialA;
Polynomial *polynomialB;
Polynomial *polynomialC;
cout<<"初始化方程,输入0代表结束!"<<endl;
cout<<"第一个方程是:";
Initial(polynomialA);
cout<<"第二个方程是:";
Initial(polynomialB);
display(polynomialA);
display(polynomialB);
cout<<"计算以后的式子是:";
caculate(polynomialA,polynomialB,polynomialC);
display(polynomialC);
sort_out(polynomialC);
display(polynomialC);
return 0;
}
求解多项式
最新推荐文章于 2023-05-13 14:44:57 发布