题解 | #四则运算#
四则运算
https://www.nowcoder.com/practice/9999764a61484d819056f807d2a91f1e
import java.util.*;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String exp = scanner.nextLine();
System.out.println(calculator(exp));
}
public static int calculator(String s) {
Stack<Integer> numbers = new Stack<Integer>();
Stack<Character> symbols = new Stack<Character>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
// when the current character is a number
if (c >= '0' && c <= '9') {
StringBuilder sb = new StringBuilder();
sb.append(c);
i++;
while (i < s.length() && s.charAt(i) >= '0' && s.charAt(i) <= '9') {
sb.append(s.charAt(i));
i++;
}
i--;
numbers.add(Integer.parseInt(sb.toString()));
// when the current character is not a number
} else {
if (symbols.isEmpty()) {
symbols.add(c);
} else {
if (c == '(' || c =='[' || c =='{') {
symbols.add('(');
} else if (c == ')' || c == ']' || c =='}') {
while (symbols.peek() != '(') {
evalOnce(numbers, symbols);
}
symbols.pop();
} else if (c == '*' || c =='/') {
while (!symbols.isEmpty() && symbols.peek() != '('
&& symbols.peek() != '+' && symbols.peek() != '-') {
evalOnce(numbers, symbols);
}
symbols.add(c);
} else if (c == '+') {
while (!symbols.isEmpty() && symbols.peek() != '(') {
evalOnce(numbers, symbols);
}
symbols.add(c);
} else if (c == '-') {
if (!isNumber(s, i)) {
while (!symbols.isEmpty() && symbols.peek() != '(') {
evalOnce(numbers, symbols);
}
symbols.add(c);
} else {
numbers.add(-1);
symbols.add('*');
}
}
}
}
}
while (!symbols.isEmpty()) {
evalOnce(numbers, symbols);
}
return numbers.pop();
}
public static boolean isNumber(String s, int i) {
if (i == 0 || s.charAt(i-1) == '(' || s.charAt(i-1) == '[' ||s.charAt(i-1) == '{') {
return true;
} else {
return false;
}
}
public static void evalOnce(Stack<Integer> numbers, Stack<Character> symbols) {
int b = numbers.pop();
char c = symbols.pop();
int a = numbers.pop();
numbers.add(evalResult(a, c, b));
}
public static int evalResult(int a, char c, int b) {
switch(c) {
case '+':
return a + b;
case '-':
return a - b;
case '*':
return a * b;
case '/':
return a / b;
}
return -1;
}
}
阿里巴巴灵犀互娱公司福利 650人发布
查看5道真题和解析