#Z01751. 神奇的后缀表达式
神奇的后缀表达式
题目描述
给出一个算数表达式,请你求出后缀表达式(后缀表达式,又称逆波兰式,指的是不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则)) 例如 1+2*3 的后缀表达式为 1 2 3 * +
具体操作过程: ·开始扫描; ·数字时,加入后缀表达式; ·运算符: a. 若为 '(',入栈; b. 若为 ')',则依次把栈中的的运算符加入后缀表达式中,直到出现'(',从栈中删除'(' ; c. 若为 除括号外的其他运算符, 当其优先级高于除'('以外的栈顶运算符时,直接入栈。否则从栈顶开始,依次弹出比当前处理的运算符优先级高和优先级相等的运算符,直到一个比它优先级低的或者遇到了一个左括号为止,然后将其自身压入栈中(先出后入)。 ·当扫描的中缀表达式结束时,栈中的的所有运算符出栈;
例如: 1+2*3
当读到“1”时,不是运算符,直接加入后缀表达式。 当读到“+”时,是运算符,压入栈中。 当读到“2”时,不是运算符,直接加入后缀表达式。 当读到“”时,此时我们需要查看栈顶的符号和此符号的优先级,因为“”的优先级>“+”的优先级,我们直接放入栈中,否则弹出栈,一直弹到不能弹出为止,最后再把当前符号压入栈。 当读到“3”时,不是运算符,直接加入后缀表达式。
读完后输出后缀表达式即可。
输入格式
输入在一行中给出不含空格的表达式,可包含+、-、*、\以及左右括号(),表达式不超过100个字符。
输出格式
在一行中输出转换后的后缀表达式,要求不同对象(运算数、运算符号)之间以空格分隔,但结尾不得有多余空格。
1+2
1+2+3
1+2*3
(1+2)*5+6/3
1 2 +
1 2 + 3 +
1 2 3 * +
1 2 + 5 * 6 3 / +
豫公网安备41072702000346号