题解 | #四则运算#抄大佬题解
四则运算
http://www.nowcoder.com/practice/9999764a61484d819056f807d2a91f1e
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
String s=sc.nextLine();
int n=s.length();
int num1=0;
int o1=1;
int num2=1;
int o2=1;
Stack<Integer> stack=new Stack<>();
for(int i=0;i<n;i++){
char c=s.charAt(i);
//遇到数字
if(Character.isDigit(c)){
int cur=0;
while(i<n && Character.isDigit(s.charAt(i))){
cur=cur*10+(s.charAt(i)-'0');
i++;
}
i--;
num2=o2==1?num2*cur:num2/cur;
}
//遇到*,/号(是乘号就是1,是除号就是-1)
else if(c=='*' || c=='/'){
o2=c=='*'?1:-1;
}
//遇到左括号,保存当前结果并且进行初始化
else if(c=='(' || c=='[' || c=='{'){
stack.push(num1);
stack.push(o1);
stack.push(num2);
stack.push(o2);
num1=0;
o1=1;
num2=1;
o2=1;
}
//遇到+,-号,说明可以计算,计算num1并且定义其他几个变量
else if(c=='+' || c=='-'){
if(c=='-' && (i==0 || s.charAt(i-1)=='(' || s.charAt(i-1)=='[' || s.charAt(i-1)=='{')){
o1=-1;
continue;
}
num1=num1+o1*num2;
o1=c=='+'?1:-1;
num2=1;
o2=1;
}
//遇到右括号,出栈,并计算num2
else{
int cur=num1+o1*num2;
o2=stack.pop();
num2=stack.pop();
o1=stack.pop();
num1=stack.pop();
num2=o2==1?num2*cur:num2/cur;
}
}
System.out.println(num1+o1*num2);
}
}