题解 | #四则运算#
四则运算
https://www.nowcoder.com/practice/9999764a61484d819056f807d2a91f1e
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNext()) { // 注意 while 处理多个 case
String str = in.nextLine();
System.out.println(v(str));
}
// System.out.println(sum("3/-1+2"));
}
private static String sum(String sub) {
if (sub.startsWith("-")) {
sub = "0" + sub;
}
Deque<String> deque = new LinkedList<>();
List<String> list = init(sub.trim());
String token = "";
for (int i = 0; i < list.size(); i++) {
token = list.get(i);
if (token.equals("*")) {
String left = deque.pop();
String right = list.get(i + 1);
token = String.valueOf(Integer.parseInt(left) * Integer.parseInt(right));
deque.push(token);
i++;
} else if (token.equals("/")) {
String left = deque.pop();
String right = list.get(i + 1);
token = String.valueOf(Integer.parseInt(left) / Integer.parseInt(right));
deque.push(token);
i++;
} else {
deque.push(token);
}
}
while (deque.size() > 1) {
String left = deque.removeLast();
String op = deque.removeLast();
String right = deque.removeLast();
if (op.equals("+")) {
token = String.valueOf(Integer.parseInt(left) + Integer.parseInt(right));
}
if (op.equals("-")) {
token = String.valueOf(Integer.parseInt(left) - Integer.parseInt(right));
}
deque.addLast(token);
}
return deque.pop();
}
private static List<String> init(String sub) {
List<String> list = new LinkedList<>();
String val = "";
char last = 0;
char ch = 0;
int symbol = 1;
for (int i = 0; i < sub.length(); i++) {
last = ch;
ch = sub.charAt(i);
int num = 0;
if (ch == '-') {
if (last == '*' || last == '/' || last == '+' || last == '-' || last == 0) {
symbol = -1;
continue;
} else if (Character.isDigit(last)) {
}
}
if (Character.isDigit(ch)) {
while (Character.isDigit(ch)) {
num = num*10 + Integer.parseInt(ch+ "");
++i;
if (sub.length() > i) {
ch = sub.charAt(i);
} else {
break;
}
}
i--;
ch = sub.charAt(i);
val = symbol * num + "";
symbol = 1;
} else {
val = ch + "";
}
list.add(val);
}
return list;
}
/**
9+3-5-10-2*10*(10+3+(4*1-10+5)-(9*5*1+5-7))
2+(4*5+1)*8+7*4+10-9+3+1*9-(6-0*4*4)
(7+4*3+10*(3-3+4-1-8-10))
-3+9*6*(6-10-2)
-3*(-1)
(3-1)
3+-1
* @param str
* @return
*/
private static String v(String str) {
String sub = "";
String re = "";
for (int i = 0; re.length() == 0; i++) {
if (str.contains("(")) {
int start = str.lastIndexOf("(");
int end = str.indexOf(")", start);
sub = str.substring(start + 1, end);
String reg = "(" + sub + ")";
str = str.replace(reg, sum(sub));
} else if (str.contains("[")) {
int start = str.lastIndexOf("[");
int end = str.indexOf("]", start);
sub = str.substring(start + 1, end);
String reg = "[" + sub + "]";
str = str.replace(reg, sum(sub));
} else if (str.contains("{")) {
int start = str.lastIndexOf("{");
int end = str.indexOf("}", start);
sub = str.substring(start + 1, end);
String reg = "{" + sub + "}";
str = str.replace(reg, sum(sub));
} else {
re = sum(str);
}
}
return re;
}
}



vivo公司福利 368人发布