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

高分求助C++代码解释

发布网友 发布时间:2023-12-23 14:00

我来回答

2个回答

热心网友 时间:2024-03-24 20:28

先说原理
两个一元多项式:A:a1x^n+a2x^(n-1)+...+anx+a(n+1)(a1,a2等等后面的数字表示下标,x^n表示x的n次幂。下同)
B:b1x^m+b2x^(m-1)+...+bmx+b(m+1)

它们相加,你只需要将指数相同的2项的系数相加,指数不变。比如3x^3+5x^3,它们的指数相同,根据刚刚说的系数相加指数不变结果就是(3+5)x^3也就是8x^3。还有就是如果相加后的结果是0,就不再输出这一项。减法和加法道理一样。同时相加后所得的结果的最高次幂和相加前2个结果的最高次幂相同(也有可能是少1,因为最高次幂经过运算系数变0了)

相乘的做法是把2个多项式都遍历一遍,然后把系数相乘,指数相加。比如(x+1)*(x^2+2x)
首先遍历第一个多项式,得到第一项X,然后x和第2个多项式的每个元素都系数相乘,指数相加,这样得到的结果是x^3+2x^2
第一个多项式的第二项是1,1也和第2个多项式的每个元素都系数相乘,指数相加,这样得到的结果是x^2+2x
最后的结果就是把得到的这2个多项式相加就可以了。如果项数很多的话就是比这麻烦而已,道理一样。

好了,如果上面说的这些你都明白了,代码就很好理解了。
一开始是定义一些链表的数据结构什么的,用链表来存多项式,每个结点表示一项,有2个参数coef和exp分别表示该项的系数和幂。

之后的代码比较简单,都是定义一些操作,来说一下项的系数大于0的5种情况。
1.如果幂等于0,就直接输出系数(就是对应的常数项的情况)
2.如果系数和指数都为1,就输出x(而不是输出1x^1)
3.如果系数为1而指数不为1,就输出x^n,n代表指数
4.如果指数为1而系数不为1,就输出nx,n代表系数
5.否则就正常输出。

加法,先判断一下谁的最高次幂高,然后按照我上面说的那些方法做就可以

乘法,while(p1!=NULL)
{
pd=new LNode;
pd->next=NULL;
p=new LNode;
p->next=NULL;
t=p;
while(p2)
{
newp=new LNode;
newp->next=NULL;
newp->data.coef=p1->data.coef*p2->data.coef;
newp->data.exp=p1->data.exp+p2->data.exp;
t->next=newp;
t=t->next;
p2=p2->next;
}
PolyAdd(pd,pc,p);
CopyLink(pc,pd);
p1=p1->next;
p2=pb->next;

如果第一个多项式的首项不为空,就依次对第2个多项式进行遍历,每项都和第一个多项式的首项做指数相加,系数相乘的运算。然后第一个多项式的首项后移。用p表示本次遍历之后得到的结果。pc表示之前的遍历得到的结果和,然后把p和pc相加

我觉得代码的注释挺详细的,希望你能看懂,不懂再给我发消息吧

热心网友 时间:2024-03-24 20:28

这只是几个函数 缺少点东西 至少没有主函数这个Link
应该是 typedef *Link 然后用Link 来定义 指针变量
/*将两个一元多项式相加*/
void PolyAdd(Link &pc,Link pa,Link pb)
{
Link p1,p2,p,pd;
CopyLink(p1,pa);
CopyLink(p2,pb);
pc=new LNode;
pc->next=NULL;
p=pc;
p1=p1->next;
p2=p2->next;
while(p1!=NULL&&p2!=NULL)
{
if(p1->data.exp<p2->data.exp)
{
p->next=p1;
p=p->next;
p1=p1->next;
}
else if(p1->data.exp>p2->data.exp)
{
p->next=p2;
p=p->next;
p2=p2->next;
}
else
{
p1->data.coef=p1->data.coef+p2->data.coef;
if(p1->data.coef!=0)
{
p->next=p1;
p=p->next;
p1=p1->next;
p2=p2->next;
}
else
{
pd=p1;
p1=p1->next;
p2=p2->next;
delete pd;
}

}

}
if(p1!=NULL)
{
p->next=p1;
}
if(p2!=NULL)
{
p->next=p2;
}

}

/*将两个多项式相减*/
void PolySubstract(Link &pc,Link pa,Link pb)
{
Link p,pt;
CopyLink(pt,pb);
p=pt;
while(p!=NULL)
{
(p->data).coef=(-(p->data).coef);
p=p->next;
}
PolyAdd(pc,pa,pt);
DestroyLink(pt);
}

//清屏函数
void Clear()
{
system("pause");
system("cls");
}

/*将两个一元多项式相乘*/
void PolyMultiply(Link &pc,Link pa,Link pb)
{
Link p1,p2,p,pd,newp,t;
pc=new LNode;
pc->next=NULL;
p1=pa->next;
p2=pb->next;
while(p1!=NULL)
{
pd=new LNode;
pd->next=NULL;
p=new LNode;
p->next=NULL;
t=p;
while(p2)
{
newp=new LNode;
newp->next=NULL;
newp->data.coef=p1->data.coef*p2->data.coef;
newp->data.exp=p1->data.exp+p2->data.exp;
t->next=newp;
t=t->next;
p2=p2->next;
}
PolyAdd(pd,pc,p);
CopyLink(pc,pd);
p1=p1->next;
p2=pb->next;
DestroyLink(p);
DestroyLink(pd);
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
怎样写小说比较容易被发掘? 笔记本独显有黄色叹号,不能工作,n卡控制面板消失重下驱动也不管用,求助... ...我的独立显卡怎么显示一个黄色的小叹号。怎么解决啊? 去了怎么造句 跑到怎么造句 临床医学可不可以报考执业药师 中秋和双节公司都发放了什么礼物啊? 请问川藏线自驾旅游可以携带医用氧气瓶吗 个人家庭如何租医用氧气瓶 fell过去式和过去分词形式 大话二未转黄金吃了祝融取火内丹大家帮我看下怎么加点好?希望仔细点 如何选择适合自己的毕业答辩PPT 模板? 梦见妈妈手脚肿很痛苦的预兆 无丝分裂与有丝分裂最主要的区别是 请问今天海宁大缺口潮水几点的 华为手机为什么接消息总是延迟? ...系住小球挂在墙上,试画出小球所受重力的示意图.(2)在图B中画出杠杆... 跪求大话西游2,500根骨敏男人需要携带那几个召唤兽,本人投入2万左右,5... DNF59级哪里经验最多? 春季培训开场 我想开家汽车用品店 ,我不会美容 装具技术可以干吗? 猜谜语:一心要把旧貌改 (打一字)谜底是什么? 请在图中画出拉力F对支点O的力臂L. 我的被盗了,然后又用手机号重新注册了一个微信,还能找回以前的微 ... 郑教授木瓜葛根粉真的有效吗 DNF59级了刷哪张图升级快,要几天? 怎么解绑的手机号? (1)请画出图1中力F对支点O的力臂L.(2)如图2所示,根据入射光线与折射光线... ...画出小球所受重力的示意图和力F对支点O的力臂L;(2)如图所示,光源S发... 作图题:①如图甲所示,画出小球所受重力的示意图和力F对支点O的力臂L... 我的vivox9 刚试了一下手机寻回铃声报警,可它过一会就响一下,怎么关... 范冰冰一共赚了多少钱?曾经8.9亿的罚款对她来说要多久才能赚回来呢... ...还是每个月领1000元 不是说可以领六个月么? ...喂的时候也不亲人,怎么让他上手听话啊?怎么能手养上手? ...在图中画出重10N的小球所受重力的示意图;(2)图所示,AO为入射光线... 绍兴讯飞自动化设备有限公司怎么样 微信被盗重新注册了,之前的绑定了我的身份证,怎么让之前的解绑... ...系住小球挂在墙上,试画出小球所受重力的示意图.(2)如图2所示F1为电 ... cout&lt;&lt;t-&gt;coef&lt;&lt;&quot;x&quot;;什么意思? root是什么意思,怎么知道手机有没有这个 仪表问答题 dnf59级怎么升60啊?一个主线任务也没有、 Corel Painter IX.5 的序列号 华为手机为什么接消息总是延迟? 如果重新注册一个之前的还可以找得回来吗? 在图中画出力F对支点O的力臂,并用字母L表示 华为手机接延迟 尔乃蛮夷是什么意思(蕞尔蛮夷是什么意思) 画出图所示拉力F对支点O的力臂,并用字母L标出。 宁波明楼北区为啥不拆