数据结构,问题 C: 后缀表达式
题目描述
所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。
如:3*(5–2)+7对应的后缀表达式为:3.5.2.-*7.+@。’@’为表达式的结束符号。‘.’为操作数的结束符号。
输入
后缀表达式(保证只包含+-*/四种操作符号,结果在int范围内)
输出
表达式的值
样例输入 复制
3.5.2.-*7.+@
样例输出 复制
16
#include<bits/stdc++.h>
using namespace std;
stack<int> st;
int main(){
string a;
getline(cin, a);
int num = 0;
for(int i = 0;a[i] != '@';i ++)
{
if(a[i] <= '9' && a[i] >= '0')
{
num = num * 10 + (a[i] - '0');
}else if(a[i] == '.'){
st.push(num);
num = 0;
}else {
int x,y;
y = st.top(),st.pop();
x = st.top(),st.pop();
switch (a[i]){
case '+' :
st.push(x + y);
break;
case '-':
st.push(x - y);
break;
case '*':
st.push(x * y);
break;
case '/':
st.push(x / y);
break;
default : break;
}
}
}
cout << st.top() << '\n';
return 0;
}