用C语言编写多项式相乘.
解决方案 »
- 复数数据类型的使用.....
- 在线等我做了个DLL,调用时候程序中断了
- 单文档下的对话框,全屏后不能返回全屏前的状态!
- 调用函数时如何用CStringArray name[]为参数?
- 【转:强贴】49年后称帝者一览(正史)有档案记录
- 我这样一行一行读文件为何不对???
- 如何来判断自己写到硬盘上的文件有没有被用户修改过?听说可以用校验码?但是不太清楚怎么做,高手指教。
- 如何把视作为对话框的一个子窗口呀?这个视如何创建呀?
- 关于 Sygate 以及代理服务器的问题
- 关于UDP打洞遇到的一点问题。服务器返回信息不正确。
- 编写帮助文件
- 请做过资源动态连接库和写过HTMLEDIT的大虾进来,给小弟我一点意见
typedef struct POLYNOMIAL{
int m_nModulus;//系数
char arrVars[MAX_VarsIndex];//MAX_VarsIndex为最大变量个数
char arrExps[MAX_VarsIndex];//为对应的指数值
POLYNOMIAL *next;
}POLYNOMIAL,*POLYNOMIAL;
建立三个有上面数据结构所组成的链表,分别存储两个多项式及其结果。
在相乘的时候,每生成一个新的项,先判断在结果中有没有与其可以合并
的项存在,如果有,则修改其系数即可,如没有,则往结果链表中加入一个
新的节点即可
比如你有一个多项式为:
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,就略去着对应的项即可。
我只能具体到这样了,这里主要涉及的是数据结构的内容,找点资料看看就可以了,而且上面的结构定义还可以进一步优化,上面这样定义可以让问题变得容易,但是以牺牲存储容量和执行速度为代价的。