#1 zaq1xsw2tktk@2010-08-16 09:21:00
16800
回复
删除
不太会写啊 见谅
大概说一下 括号直接递归调用解决
一下假设没有括号
用v0,v1,v2,..,vn存放符号之间的单项式
用f0,f1,f2,...,fn-1存放符号
令pi=i+1;
这样符号fi 其实就是与v[pi]进行运算
如a+b*a^4
v0=a v1=b v2=a v3=4
f0=+ f1=* f2=^
p0=1 p1=2 p2=3 p3=-1
第一次计算乘方 及计算当fi=^ 时 vi 与 v[pi] 在符号 fi 的运算下的值 复制到 vi
在令 pi=p[pi] 及删除下一个节点
这样遍历3次
大概相当于链表
没用高精度 70。。
#2 y63308042@2010-08-17 02:09:00
16820
回复
删除
不知道够不够严密,发个伪代码吧..
//昨天我考虑的是没排除+-*/的算法,所以能兼容-和/
//不过貌似题目没要求..当+-共存时要从右往左扫描滴
type 高精度类型
二维高精度数组类型
//有效符号指存在于括号外的符号
function calc (式子:string):二维高精度数组
{
if 没有运算符 then exit( 转换( 式子 -> 数组 ) )
if 式子两端有一对括号(相对应的,一左一右) then 删除两端括号
if pos('+''-') then
if 存在有效+-号 then
{
tmp=右边第一个有效+-号
exit( 矩阵加减( calc(左串) , calc(右串) ) )
}
if pos('*''/') then
if 存在有效*/号 then
{
tmp=右边第一个有效*/号
exit( 矩阵乘除( calc(左串) , calc(右串) ) )
}
if pos('^') then
if 存在有效^号 then
{
tmp=右边第一个有效^号
exit( 矩阵乘方( calc(左串) , calc(右串) ) )
}
}