前缀表达式(波兰表达式)的计算

波兰表达式也称之为前缀表达式,即运算符放置于操作数之前。
计算波兰表达式的值的方法:
(1)从后往前遍历表达式。
(2)遇到数字直接入栈。
(3)遇到运算符,取出两个数字,第一个作为操作数,第二作为被操作数,执行相应的运算。将运算的结果继续入栈。
(4)当表达式遍历完时,此时栈顶元素即为计算结果。

int cal(string s) {
	stack<int> st;
	for (int i=s.length()-1; i>=0; --i) {
		if (isdigit(s[i])) { 
			st.push(s[i] - '0');
		} else if (s[i] == '+') {
			int a = st.top(); st.pop();
			int b = st.top(); st.pop();
			st.push(a+b);
		} else if (s[i] == '-') {
			int a = st.top(); st.pop();
			int b = st.top(); st.pop();
			st.push(a-b);
		} else if (s[i] == '*') {
			int a = st.top(); st.pop();
			int b = st.top(); st.pop();
			st.push(a*b);
		} else if (s[i] == '/' ) {
			int a = st.top(); st.pop();
			int b = st.top(); st.pop();
			st.push(a/b);
		}
	}
	return st.top();
}

int main() {
	string s = "-+8*3-27/42";
	cout << cal(s) << endl;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值