import java.util.LinkedList;
import java.util.Scanner;
import java.util.Stack;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Stack stack = new Stack();
String s=sc.nextLine();
for (int i = 0; i < s.length(); i++) {
char c=s.charAt(i);
if(c==')'){
LinkedList list = new LinkedList();
String s2;
while(!(s2=stack.pop().toString()).equals("(")){
list.addFirst(s2);
}
stack.push(f(list));
}else{
if(c<'0'){
stack.push(c);
}else{
int j=i;
StringBuilder sb = new StringBuilder();
while(c>='0'){
sb.append(c);
j++;
if(j==s.length())
break;
c=s.charAt(j);
}
i=j-1;
stack.push(Integer.parseInt(sb.toString()));
}
}
}
LinkedList list = new LinkedList();
while(!stack.isEmpty())
list.addFirst(stack.pop());
System.out.println(f(list));
}
private static Object f(LinkedList list) {
// TODO Auto-generated method stub
LinkedList list2 = new LinkedList();
while(!list.isEmpty()){
String s=list.poll().toString();
if(s.equals("*")||s.equals("/")){
int a=Integer.parseInt(list2.pollLast().toString());
int b=Integer.parseInt(list.pop().toString());
if(s.equals("*"))
list2.addLast(a*b);
else
list2.add(a/b);
}else{
list2.add(s);
}
}
while(list2.size()!=1){
int a=Integer.parseInt(list2.poll().toString());
String s2=list2.poll().toString();
int b=Integer.parseInt(list2.poll().toString());
if(s2.equals("+")){
list2.addFirst(a+b);
}else{
list2.addFirst(a-b);
}
}
return list2.getFirst();
}
}
蓝桥杯 算法训练 表达式计算 JAVA
最新推荐文章于 2020-07-18 16:45:08 发布