SSOJ2456中缀表达式值
6163+
作者:crxis 发布:2017-07-03 分类:递归
题目大意:给你一个带括号的加减乘除中缀表达式,请判断他是否合法,如果合法,你能算出他的结果吗?
题目描述
输入一个中缀表达式(由0-9组成的运算数、加+减-乘*除/四种运算符、左右小括号组成。注意“-”也可作为负数的标志,表达式以“@”作为结束符),判断表达式是否合法,如果不合法,请输出“NO”;否则请把表达式转换成后缀形式,再求出后缀表达式的值并输出。
注意:必须用栈操作,不能直接输出表达式的值。
输入
第1行为一个以@结束的字符串。
输出
如果表达式不合法,请输出“NO”,要求大写。如果表达式合法,请输出计算结果。
样例输入
1+2*8-9@
样例输出
8
解题思路
没有括号时,该怎么算就怎么算:遇到乘除,直接算a*=b;遇到加减,看一下后面的运算符是否更优先,更优先则先算后面的b*=c,算完后面更优先的后再算前面的a+=b。算到没有运算符时,结束。(更多思路请见上一篇文章)
遇到括号,则把括号里面看成一个整体,看成一个数,这个数是一个表达式,用上述方法getstr()求出他的值。
如果有左括号,后面没有右括号,则不合法;如果遇到非预定字符,也不合法;如果该读数字,却是+*/)等开头,更不合法……如果/0,是否合法呢?
程序实现
以下是单纯求含有小括号的加减乘除四则运算的表达式的值的程序实现: