题解 | #四则运算#
四则运算
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());
}
}
}


