问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求解多项式

发布网友 发布时间:2022-05-31 21:46

我来回答

1个回答

热心网友 时间:2023-10-30 13:57

直接给你我自己的代码,可以精简的
#include<iostream>
#define MaxExp 1000
#define Max 100
using namespace std;
typedef struct Node{
int coef; //系数
int exp; //指数
struct Node *link;//指向下一个节点的指针
}LinkList;
////////////////////////////////////////////////////////
//建立循环链表
void CreateLinkList(LinkList *&L,int Coef[],int Exp[],int n)
{
L=(LinkList *)malloc(sizeof(LinkList));//
L->link=L;
LinkList *p,*s;
p=L; int i; //L指向头结点
for(i=0;i<n;i++){
s=(LinkList*)malloc(sizeof(LinkList)); //创建新结点
s->coef=Coef[i];s->exp=Exp[i];
s->link=L;
p->link=s;
p=s;
}
}
////////////////////////////////////////////////////////////
/*返回X的值*/
int Calc(LinkList *L)
{
LinkList *p;
p=L->link;
int q=0;
while(p!=L)
{
if(p->exp==1){q+=p->coef;}//查找指数为1的项,并返回系数的和
p=p->link;
}
return q;
}
//////////////////////////////////////////////////////////
/*多项式相乘的算法*/
LinkList* Add(LinkList *L1,LinkList *L2)
{/*两多项式相加*/
LinkList *p,*q,*r,*L3,*s;
L3=(LinkList *)malloc(sizeof(LinkList));//创建新链表的头结点
L3->link=L3;
p=L1->link;q=L2->link;r=L3->link;
int sum;
while(p!=L1&&q!=L2)
{
if(p->exp==q->exp)
{ //若指数相等,系数相加,链入链表
sum=p->coef+q->coef;
if(sum!=0)
{s=(LinkList*)malloc(sizeof(LinkList));
s->coef=sum;
s->exp=p->exp;
r->link=s;
r=s;
}
p=p->link;
q=q->link;
}
else
{//若指数不等,取指数较小的一项链入链表
if(p->exp>q->exp)
{s=(LinkList*)malloc(sizeof(LinkList));
s->coef=q->coef;
s->exp=q->exp;
r->link=s;
r=s;
q=q->link;
}
else
{s=(LinkList*)malloc(sizeof(LinkList));
s->coef=p->coef;
s->exp=p->exp;
r->link=s;
r=s;
p=p->link;
}
}
}
while(p!=L1)
{ //链入表1的剩余部分
s=(LinkList*)malloc(sizeof(LinkList));
s->coef=p->coef;
s->exp=p->exp;
r->link=s;
r=s;
p=p->link;
}
while(q!=L2)
{ //链入表2的剩余部分
s=(LinkList*)malloc(sizeof(LinkList));
s->coef=q->coef;
s->exp=q->exp;
r->link=s;
r=s;
q=q->link;
}
r->link=L3;//构成循环链表
return L3;

}

LinkList* Alone(const LinkList *L,int a,int b)
{// 用一个多项式的其中一项乘以另一个多项式,返回新多项式的表头指针
//a为该项的系数,b为该项的指数
LinkList *p,*r,*q;
LinkList *L1;
L1=(LinkList*)malloc(sizeof(LinkList));//创建新链表,使原多项式不改变
L1->link=L1;
p=L->link;
r=L1->link;
while(p!=L)
{ //将改变后的各项系数及指数存入新链表中
q=(LinkList*)malloc(sizeof(LinkList));
q->exp=p->exp+b;
q->coef=p->coef*a;
q->link=L1;
r->link=q;
r=q;
p=p->link;
}
return L1;
}
LinkList* Mulpty(LinkList *a,LinkList *b)
{//多项式相乘,利用相加运算,分解多项式
LinkList *p,*q;
p=a->link;
q=b->link;
LinkList *newl;
newl=(LinkList*)malloc(sizeof(LinkList));
newl->link=newl;
while(p!=a)
{
newl=Add(newl,Alone(b,p->coef,p->exp));
p=p->link;
}
return newl;
}
//////////////////////////////////////////////////////////////////////
void output(LinkList *a)
{ //输出多项式的信息(合并同类项)
int A[MaxExp]={0};
LinkList *p=a->link;
int t=0,i;
while(p!=a) //合并同类项按指数大小从小到大依次输出
{
if(p->exp>t)t=p->exp;
A[p->exp]+=p->coef;p=p->link;
}
cout<<"各项信息:"<<endl;
for(i=0;i<=MaxExp;i++)
{
if(A[i]!=0)cout<<'('<<A[i]<<','<<i<<')';
}

cout<<endl;
}
///////////////////////////////////////////////////////////////////////
int main()
{
LinkList *a;
LinkList *b;
int CoefA[Max],ExpA[Max];
int CoefB[Max],ExpB[Max];
int na,nb,i;
cout<<"请输入多项式A的项数:"<<endl;
cin>>na;
cout<<"输入各项的系数及指数:"<<endl;
for(i=0;i<na;i++)
cin>>CoefA[i]>>ExpA[i];
CreateLinkList(a,CoefA,ExpA,na);
cout<<"请输入多项式B的项数:"<<endl;
cin>>nb;
cout<<"输入各项的系数及指数:"<<endl;
for(i=0;i<nb;i++)
cin>>CoefB[i]>>ExpB[i];
CreateLinkList(b,CoefB,ExpB,nb);
LinkList *c;
cout<<"A中X的值:"<<Calc(a)<<endl;
cout<<"B中X的值:"<<Calc(b)<<endl;
cout<<"多项式A+B:"<<endl;
output(Add(a,b));
c=Mulpty(a,b);
cout<<"***********************************"<<endl;
cout<<"多项式A*B:"<<endl;
output(c);
cout<<"************************************"<<endl;
cout<<"多项式A:"<<endl; //输出原来的多项式,并未改变
output(a);
cout<<"多项式B:"<<endl;
output(b);
system("pause");
return 0;
}
五、输入输出示例
/*
输入示例:
4
1 0
2 3
5 4
6 2
5
1 1
2 2
2 3
4 6
6 5
输出示例:
A中X的值:0
B中X的值:1
多项式A+B:
各项信息:
(1,0)(1,1)(8,2)(4,3)(5,4)(6,5)(4,6)
***********************************
多项式A*B:
各项信息:
(1,1)(2,2)(8,3)(14,4)(27,5)(18,6)(46,7)(36,8)(38,9)(20,10)
***********************************
多项式A:
各项信息:
(1,0)(6,2)(2,3)(5,4)
多项式B:
各项信息:
(1,1)(2,2)(2,3)(6,5)(4,6)
请按任意键继续. . .
打字不易,如满意,望采纳。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
急求高人解答 ···管理类的问题 ···!!!急急急···我会在线等... ...如果基层管理幅度为8,高层管理人员管理幅度为3,则该公司中层管理人员... ...发生化学变化的实质是( )A.分子间隔发生变化B.物质状态发生改变C... 下列变化不能说明发生了化学变化的是( )A.变化时有电子的得失或共用电... 下列描述正确的是( )A.固态物质的分子间无间隔B.液态物质的分子不断运动... 原来微信打开这个功能,能够看到马路上的街景,涨知识了! ...百度帐号被人在异地登录了,问题是没有任何人知道我的密码啊?而且也... 医疗事故纠纷和医疗损害纠纷的区别是什么 医疗纠纷与医疗事故的定义是什么? 医疗事故纠纷是指什么的 广西灵山县灵多有限公司怎么样? 广西灵山县鹿生源鹿业开发有限公司怎么样? 广西灵山县的支柱产业有哪些? 灵山县铭和置业投资有限公司怎么样? 灵山县晟磊投资有限责任公司怎么样? 灵山县2015年完成地产投资多少亿 成都锦江色优轻医疗美容诊所有限公司怎么样? 灵山县星辉投资有限公司怎么样? 成都有没有正规的皮肤管理机构呀?想长期做脸 成都高新优珈轻医疗美容诊所有限公司怎么样? 余额宝国泰利是宝基金收益高吗 国泰淘金互联网债券基金是怎么算收益的? 混合基金国泰安康养老定期支付基金的风险收益怎么样? 请问:国泰发行的新分离式基金约定年收益率高吗? 水培药用植物有哪些 QQ空间边框怎么去掉? QQ空间制作怎么把首页底色改了,有图去掉边框,还能写字? 求高手啊:怎么把QQ空间的图片模块的边框去掉? QQ空间里主页图片边框怎么去掉? 如何去掉QQ空间自定义图片的边框? 双开关L1A、L2A、L3A、L1B、L2B、L3B什么意思,接两个灯怎么接 给推荐几家呼和浩特英语培训机构? 呼和浩特最好的美术培训班是那个? 呼和浩特有哪些好一点的英语培训机构 是不是第二次分手后,就再也不可能了? 分手了真的就没有可能了吗? 男生分手后说不可能是真的吗 耳朵很痒,从里面流出有味道的液体是什么情况 耳朵痒 扣疤就流水 而且很臭 耳朵黄黄的流水,还会发臭,有点痒,怎么办 x9s手机充电槽坏了修理需要多少 日本产表怎么自动对时 广州法信云科技有限公司怎么样? 日本带回来的光能表怎么调时差 广安法信法律咨询服务有限公司怎么样? 裁缝拉两姐弟入伍,裁缝官至司令,姐姐壮烈牺牲,弟弟成为中将,他们是谁? 上将给中将敬礼 哪位开国中将被洪学智等上将们称为首长 坐标北京大兴,求靠谱的代一理记账推荐? 宝宝睡着了还要喂奶吗