高分求助C++代码解释

来源:百度知道 编辑:UC知道 时间:2024/06/06 00:21:22
这是C++一元多项式的加减乘 运算程序,可否帮我解释下各个模块的作用,及
相应的加减乘的操作原理
代码有点长,看hi,baidu里的代码吧,好答案加分。
http://hi.baidu.com/fox4four/blog/item/d1c1fca64eab089dd04358ec.html

先说原理
两个一元多项式: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;