设万维读者为首页 广告服务 技术服务 联系我们 关于万维
简体 繁体 手机版
分类广告
版主:
万维读者网 > 灵机一动 > 帖子
计算表达式解法
送交者: 田苗 2006年12月14日10:10:47 于 [灵机一动] 发送悄悄话


假定空格自动从数组中除去,数组最后一项必定是分号(;),输入的表达不违反规则(比如操作符不能省略)。另设两个操作数暂存器分别为a和b。可处理的表达式的例子:
3*(2+3*4+((9-4)*5))-3
(2)-3*4+((8+3))
((5+6*3-(3+2*4)))
没有考虑优化。

一开始i=1,p,a和b为空(区别于0)。

1:如Q是左括弧'(',去2。
  如Q是右括弧')',去3。
  如Q是分号';',去4。
  如Q是操作符(+,-,*,/),去5。
  其它(必定是操作数),去6。

2:i增加1,使a,b和p为空。回1。

3:如a和b都不空,则根据操作符p,处理a和b,把结果放在Q[i-3],使Q[i-2]和Q[i-1]为空。
  否则(a必定不空),使Q[i-2]=a,使Q[i-1]和Q为空。然后使a,b和p为空,i=1,回1。

4:如a和b都不空,则根据操作符p,处理a和b,把结果放在Q[i-3],使a,b,p,Q[i-2]和
  Q[i-1]为空,i=1,回1。否则(a必定不空),a就是表达式的结果,处理结束。

5:如b为空(a必定不空),去7。否则(必定是a,b和p都不空),去8.

6:如a为空,使a=Q。否则(p必定不空),是b=Q。然后,i增加1,回1.

7:使p=Q,i增加1,回1。

8:如Q比p优先,则使a=b,p=Q,b为空,i增加1。否则,根据p值的操作符,处理a和b,
  把结果放在Q[i-3],使a,b,p,Q[i-2]和Q[i-1]为空,i=1。然后回1。

0%(0)
0%(0)
标 题 (必选项):
内 容 (选填项):
实用资讯
回国机票$360起 | 商务舱省$200 | 全球最佳航空公司出炉:海航获五星
海外华人福利!在线看陈建斌《三叉戟》热血归回 豪情筑梦 高清免费看 无地区限制
一周点击热帖 更多>>
一周回复热帖