标签:
/**
* 后缀表达式的计算
*
* 使用栈来保存结果
*
* 1.从左向右逐一检查后缀表达式中的每一个字符
* 2.遇到数字直接push入栈
* 3.遇到操作符,就从栈中弹出两个数参与运算,将结果保留在栈中,如果操作符是 /,-或者^
* 号,则后弹出的数是第一个运算数
* 4.最后的结果保留在栈中**/
import java.util.Stack;
public class calc {
public double calculate(String postfix){
Stack<Double> sk=new Stack<Double>();
char[] ch=postfix.toCharArray();
for(int i=0;i<ch.length;i++){
if(Character.isDigit(ch[i]))
sk.push(Double.valueOf(String.valueOf(ch[i])));
else
c(sk,ch[i]);
}
return sk.pop();
}
public void c(Stack<Double> sk,Character ch){
switch(ch+0){
case '+'+0:
sk.push(sk.pop()+sk.pop());
break;
case '-'+0:
double tmp=sk.pop();
sk.push(sk.pop()-tmp);
break;
case '*'+0:
sk.push(sk.pop()*sk.pop());
break;
case '/'+0:
double temp=sk.pop();
sk.push(sk.pop()/temp);
break;
case '^'+0:
double tp=sk.pop();
sk.push(Math.pow(sk.pop(),tp));
break;
case '%'+0:
double mp=sk.pop();
sk.push(sk.pop()%mp);
break;
default :
throw new RuntimeException();
}
}
}
//测试
输入 6*2+(2^2+3*2/(3-1)^2)*(3-1)
输出 23.0
标签:
原文地址:http://blog.csdn.net/ylqhust/article/details/42179329