标签:
/** * 后缀表达式的计算 * * 使用栈来保存结果 * * 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