题解 | #四则运算#
四则运算
https://www.nowcoder.com/practice/9999764a61484d819056f807d2a91f1e
import java.util.Deque; import java.util.LinkedList; import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNextLine()) { // 注意 while 处理多个 case String s = in.nextLine(); s = s.replace('[','('); s = s.replace('{','('); s=s.replace(']',')'); s=s.replace('}',')'); //System.out.println(s); Deque<Integer> numbers = new LinkedList<>(); Deque<Character> operators = new LinkedList<>(); int n = s.length(); for (int i = 0 ; i < n ; ++i) { StringBuffer sb = new StringBuffer(); while(i < n && s.charAt(i) >= '0' && s.charAt(i) <= '9') { sb.append(s.charAt(i)); ++i; //System.out.println(s.charAt(i)); } //System.out.println(sb.toString()); if(sb.length() > 0){ numbers.push(Integer.valueOf(sb.toString())); } if (i < n) { char op = s.charAt(i); if (op == '(') { operators.push(op); } else if (op == '+' || op == '-') { if(operators.isEmpty()){ operators.push(op); continue; } char opPeak = operators.peek(); while (!operators.isEmpty() && operators.peek()!='(') { int a = numbers.pop(); int b = numbers.pop(); if (opPeak == '*') { numbers.push(a * b); } if (opPeak == '/') { numbers.push(b / a); } if(opPeak == '+'){ numbers.push(b+a); } if(opPeak=='-'){ numbers.push(b-a); } operators.pop(); if(operators.isEmpty()){ break; } opPeak = operators.peek(); } operators.push(op); } else if (op == '*' || op == '/') { operators.push(op); } else { while (operators.peek() != '(') { char opPeak = operators.pop(); int a = numbers.pop(); int b = numbers.pop(); //System.out.println(a+" "+b); //System.out.println(numbers); //System.out.println(operators); if (opPeak == '+') { numbers.push(a + b); } else if (opPeak == '-') { numbers.push(b - a); } else if (opPeak == '*') { numbers.push(a * b); } else { numbers.push(b / a); } } operators.pop(); //把左括号出栈 } } } while (!operators.isEmpty()) { int a = numbers.pop(); int b = numbers.pop(); char op = operators.pop(); if (op == '+') { numbers.push(a + b); } else if (op == '-') { numbers.push(b - a); } else if (op == '*') { numbers.push(a * b); } else { numbers.push(b / a); } } System.out.println(numbers.peek()); } } }