这个表达式如何求值的文章写得很好:如何用栈求表达式的值?(超级详细) (biancheng.net) 通过后缀表达式求值计算出来了,(A(BC)DE(F(GH))JKL)这个计算法则可以看成是直接可用的后缀表达式,每一个“)”相当于是前面两个操作数的乘法运算符,用java通过了: import java.util.*; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); // System.out.println(n); int[][] data = new int[n][2]; int i = 0; while (in.hasNextInt()) { data[i][0] = in.nextInt(); data[i][1] = in.nextInt(); // System.out.println(data[i][0] + " " + data[i][1]); i = i + 1; } String expr = in.nextLine(); while (in.hasNextLine()) { expr = in.nextLine(); } // System.out.println(expr); char[] c = expr.toCharArray(); Stack<Object> stack = new Stack(); int sum = 0; for (char t : c) { if (t >= 'A' && t <= 'Z') { stack.push(data[t - 'A']); } else if (t == '(') { stack.push(t); } else { int[] b = (int[])stack.pop(); int[] a = (int[])stack.pop(); stack.pop(); sum = sum + a[0] * a[1] * b[1]; stack.push(new int[]{a[0], b[1]}); } } System.out.println(sum); } }

京公网安备 11010502036488号