求解多项式

#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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值