t****a 发帖数: 1212 | 1 表达式包含三种元素:
数字:简单起见仅仅考虑整数
运算符:分为单目和双目运算符两类,单目运算符比如负号。运算符有优先级,^ > */
> +-
括号:括号可以改变计算的优先级
要求写一个算法,可以计算表达式比如 (1+2)*3/4^5
为了方便解析,表达式中所有的相邻元素用空格分开,比如( 1 + 2 ) * 3 / 4 ^ 5
如果表达式有错误那么就报错,否则返回计算结果
怎么做? |
c********t 发帖数: 5706 | 2 先转成逆波兰,再算。
*/
【在 t****a 的大作中提到】 : 表达式包含三种元素: : 数字:简单起见仅仅考虑整数 : 运算符:分为单目和双目运算符两类,单目运算符比如负号。运算符有优先级,^ > */ : > +- : 括号:括号可以改变计算的优先级 : 要求写一个算法,可以计算表达式比如 (1+2)*3/4^5 : 为了方便解析,表达式中所有的相邻元素用空格分开,比如( 1 + 2 ) * 3 / 4 ^ 5 : 如果表达式有错误那么就报错,否则返回计算结果 : 怎么做?
|
r*****e 发帖数: 146 | 3 +1, agree
【在 c********t 的大作中提到】 : 先转成逆波兰,再算。 : : */
|
l***8 发帖数: 149 | |
A*****i 发帖数: 3587 | 5 想知道怎么转逆波兰?如果能转成逆波兰的话,那证明已经可以按照本来顺序计算了那
不如直接算了 |
j*****y 发帖数: 1071 | 6 逆波兰有很简单的算法 : shunting-yard
【在 A*****i 的大作中提到】 : 想知道怎么转逆波兰?如果能转成逆波兰的话,那证明已经可以按照本来顺序计算了那 : 不如直接算了
|
r*********n 发帖数: 4553 | 7 但是要现场写出shunting yard algorithm还是不容易吧,有很多case要考虑
【在 j*****y 的大作中提到】 : 逆波兰有很简单的算法 : shunting-yard
|