一、题目
计算“9 + (3 - 1) × 3 + 10 / 2”字符串的值
二、解题思路
2.1 后缀表达法(RPN):
是一种不需要括号的后缀表达式法。
规则:
从左到右便利表达式的每一个数字和符号,遇到数字就进栈,遇到符号就将处于栈顶两个数字出栈,进行计算,运算结果进栈,一直到最终获得结果。
2.2 中缀表达式转后缀表达式
规则:
从左到右便利中缀表达式的每一个数字和符号,若是数字就输出,即成为后缀表达式的一部分;若是符号,则判断其与栈顶符号的优先级,是右括号或者优先级不高于栈顶符号则栈顶元素依次出栈并输出,并将当前符号进栈,一直到最终输出后缀表达式为止。
三、Java代码实现
static String exp = "9 + (3-1) * 3 + 10 / 2";
public static void main(String[] args) {
List<String> strings = splitExp(exp);
List<String> rights = mid2Right(strings);
Stack<String> stack = new Stack<>();
for (String str : rights) {
if (str.equals("+") || str.equals("-") || str.equals("*") || str.equals("/")) {
BigDecimal a1 = new BigDecimal(stack.pop());
BigDecimal a2 = new BigDecimal(stack.pop());
if (str.equals("+")) {
stack.push(a2.add(a1).toString())