算法3-4:表达式求值

时间限制: 1 Sec
内存限制: 32 MB
提交: 7
正确率: 58 %

题目描述

算数四则运算的规则是1)先乘除,后加减;2)从左算到右;3)先括号内,后括号外。

由此,算式4+2*3-10/5的计算顺序为4+2*3-10/5=4+6-10/5=4+6-2=8。 给定一个以“#”作为结束符的算式,求出算式的结果。 给出严蔚敏《数据结构(C语言)》中的一段算法描述以作参考: 图1:表达式求值算法 图2:表达式求值算法(续) 图3:表达式求值算法(续)


输入

以“#”结尾的表达式,运算数为正整数。每个表达式占一行。


输出

输出表达式运算的结果。


样例输入

4+2*3-10/5#
3*(7-2)#
2*3/2#

样例输出

8
15
3

提示

提示:使用栈来解决本题,很多人都会想到。但怎样建栈,却带来了问题。同样,严书上的代码实际上也给大家带来了问题。看过严书光盘中代码的人应该知道,代码中使用了两个栈,一个是存储运算符的,类型为char;另一个存储运算数,类型为float。而操作两个栈的函数都一样。要知道,除非像C++中使用泛型,C语言中却基本不能实现这样的操作。所以在C语言环境中需要将这两个栈结合在一起。由于char与int有种特别的联系,可以使用int来代替char存储运算符。总结:注意灵活运用栈,要是能够学习C++使用template就更好了。可以模拟STL了。

正确答案提交历史

刷题达人榜

  • WriteBug ( 517 )
  • Aline ( 20 )
  • 管理员 ( 23 )
  • Carmelo ( 14 )
  • HMF ( 23 )
  • daocaorenweiyi ( 13 )
eject