题解 | #表达式求值#
表达式求值
https://www.nowcoder.com/practice/9566499a2e1546c0a257e885dfdbf30d
import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { private static int i = 0;//i作工作指针 public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNextLine()) { // 注意 while 处理多个 case char[] ch = in.nextLine().toCharArray(); System.out.println(compute(ch)); i = 0;//每处理一个字符串更新指针 } } private static int compute(char[] ch) { Stack<Integer> stack = new Stack<>(); char sign = '+'; int len = ch.length; int num = 0; while (i < len) { //遇左括号递归 if (ch[i] == '(') { i++; num = compute(ch); } //遇数字计算 while (i < len && Character.isDigit(ch[i])) { num = num * 10 + (ch[i] - '0'); i++; } //遇到符号才对栈处理 if (sign == '+')stack.push(num); if (sign == '-')stack.push(-num); if (sign == '*')stack.push(num * stack.pop()); if (sign == '/')stack.push(num / stack.pop()); if (i >= ch.length)break; //最后一次递归可能越界 sign = ch[i]; //更新符号 num = 0; if (ch[i] == ')') { i++; break; } i++;//没有碰到回括号,指针后移 } int sum = 0; while (stack.size() != 0) { sum += stack.pop(); } return sum; } }