100 #4000. 中缀表达式的值
中缀表达式的值
描述 人们熟悉的四则运算表达式称为中缀表达式,例如(23+34*45/(5+6+7))。在程序设计语言中,可以利用堆栈的方法把中缀表达式转换成保值的后缀表达式(又称逆波兰表示法),并最终变为计算机可以直接执行的指令,得到表达式的值。
给定一个中缀表达式,编写程序,利用堆栈的方法,计算表达式的值。
输入: 第一行为测试数据的组数N 接下来的N行,每行是一个中缀表达式。表达式中只含数字、四则运算符和圆括号,操作数都是正整数,数和运算符、括号之间没有空格。中缀表> 达式的字符串长度不超过600。
输出: 对每一组测试数据输出一行,为表达式的值
样例输入: 3 3+5*8 (3+5)*8 (23+34*45/(5+6+7))
样例输出: 43 64 108
提示 注意:运算过程均为整数运算(除法运算'/'即按照C++定义的int除以int的结果,测试数据不会出现除数为0的情况),输出结果也为整数(可能为负)。 中间计算结果可能为负。
解题思路:先转换成后缀表达式,再对后缀表达式求值。
转换成后缀表达式:
- 遇到操作数直接输出
- 遇到操作符直接压入栈中
- 遇到右括号不断弹出操作符直到遇到左括号
- 遇到操作符不断弹出直到遇到优先级更低的操作符
- 输入完毕后弹出栈内所有元素
计算后缀表达式
- 遇到操作数直接压入栈
- 遇到操作符就从栈中弹出两个操作数进行运算,再压入栈中
- 循环完毕后栈中剩下的最后一个元素就是答案
Limitation
1s, 1024KiB for each test case.