/*表达式求值,先转换成后缀表达式,再计算。
//从中缀表达式中从左往右依次取出数据
//如遇到操作数,直接输出到后缀的队列里。
//如果遇到操作符(包括括号),这里再定义一个存放操作符的栈,则:
//i.如果操作符是'(',入栈
//ii.如果操作符是')',则把栈里的操作符依次出栈并插入到后缀序列后面,直到遇到')'.
//iii.如果操作符不是‘(’和‘)’,则:
// (1). 如果操作符的优先级比top的优先级高,则入栈
// (2).如果操作符优先级等于或小于top优先级,则将top出栈并插入到后缀序列后面,pop后,再比较栈顶元素的优先级,重复iii,直到把此操作符 插入,将此操作符入栈。
如果中序队列里的数据已经读取完毕,记录操作符的栈里,还有操作符的话,依次出栈插入到后缀序列的后面。
此时中缀就已经转换为后缀表达式。*/
//然后对后缀表达式从前到后扫描,遇到数据入栈,遇到操作符则弹出两个数字进行计算,然后将计算结果入栈,重复操作,当扫描完毕后,栈定的元素便是结果
import java.util.*;
public class Biaodashi1 {
public static void main(String args[]){
Scanner in=new Scanner(System.in);
while(in.hasNext()){
String str=in.nextLine();
System.out.printf("%.0f\n",f2(str));
}
}
public static double f2(String str){
Stack stack=new Stack();
Queue queue=new LinkedList();
String str1[]=str.split(" ");
for(int i=0;i0){
String temp2=stack.peek();
if(temp2.compareTo("*")==0 ||temp2.compareTo("/")==0){
queue.offer(stack.pop());
}else{
break;
}
}
stack.push(str1[i]);
}else if(str1[i].compareTo("+")==0 || str1[i].compareTo("-")==0){
while(stack.size()>0){
String temp2=stack.peek();
if(temp2.compareTo("*")==0 ||temp2.compareTo("/")==0 ||temp2.compareTo("+")==0 ||temp2.compareTo("-")==0){
queue.offer(stack.pop());
}else{
break;
}
}
stack.push(str1[i]);
}else if(str1[i].compareTo("(")==0){
stack.push(str1[i]);
}else if(str1[i].compareTo(")")==0){
String temp1=stack.pop();
while(temp1.compareTo("(")!=0){
queue.offer(temp1);
temp1=stack.pop();
}
}else{
queue.offer(str1[i]);
}
}
while(stack.size()>0){
queue.offer(stack.pop());
}
Stack res=new Stack();
while(queue.size()>0){
String temp3=queue.poll();
if(temp3.compareTo("+")==0 || temp3.compareTo("-")==0 || temp3.compareTo("*")==0 || temp3.compareTo("/")==0){
double num1=Double.parseDouble(res.pop());
double num2=Double.parseDouble(res.pop());
if(temp3.compareTo("+")==0){
res.push((num1+num2)+"");
}else if(temp3.compareTo("-")==0){
res.push((num2-num1)+"");
}else if(temp3.compareTo("*")==0){
res.push((num2*num1)+"");
}else{
res.push((num2/num1)+"");
}
}else{
res.push(temp3);
}
}
return Double.parseDouble(res.pop());
}
}