码迷,mamicode.com
首页 > 其他好文 > 详细

后缀表达式的计算

时间:2014-12-27 08:58:48      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!