用C语言编写多项式相乘.

解决方案 »

  1.   

    定义一个链表,结构如下:
    typedef struct POLYNOMIAL{
       int m_nModulus;//系数
       char arrVars[MAX_VarsIndex];//MAX_VarsIndex为最大变量个数
       char arrExps[MAX_VarsIndex];//为对应的指数值
       POLYNOMIAL *next;
    }POLYNOMIAL,*POLYNOMIAL;
    建立三个有上面数据结构所组成的链表,分别存储两个多项式及其结果。
    在相乘的时候,每生成一个新的项,先判断在结果中有没有与其可以合并
    的项存在,如果有,则修改其系数即可,如没有,则往结果链表中加入一个
    新的节点即可
      

  2.   

    sorry,上面的结构第三项应该是float型的,写错了
    比如你有一个多项式为:
    3XYZ-2X(由于指数不好写,所以暂时都为1次幂的)
    另一个为2YZ-3Y
    这样给第一项结构化为(3,{X,Y,Z},{1,1,1},指向(-2X的指针)),
    (-2,{X,Y,Z},{1,0,0},指向链表结尾尾)
    第二个的结构化结构为(2,{X,Y,Z},{0,1,1},指向(-3Y的指针)),
    (-3,{X,Y,Z},{0,1,0},指向链表结尾尾)
    这样就可以用一个二层循环结构进行相乘,对系数项做乘法,对指数数组做对应的加法,应该得到结果节点为四个,如下:
    (6,{X,Y,Z},{1,2,2},指向下一个节点}
    (-4,{X,Y,Z},{1,1,1},指向下一个节点}
    (-9,{X,Y,Z},{1,2,1},指向下一个节点}
    (6,{X,Y,Z},{1,1,0},指向链表结尾}
    如果指数项有完全相同的,就进行合并这两个节点得操作,最后就可以输出结果了,如果那项指数为0,就略去着对应的项即可。
    我只能具体到这样了,这里主要涉及的是数据结构的内容,找点资料看看就可以了,而且上面的结构定义还可以进一步优化,上面这样定义可以让问题变得容易,但是以牺牲存储容量和执行速度为代价的。