题目描述
所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。
如:3*(5-2)+7 对应的后缀表达式为:3.5.2.-*7.+@。在该式中,@ 为表达式的结束符号。. 为操作数的结束符号。
输入
输入一行一个字符串 s,表示后缀表达式。
输出
输出一个整数,表示表达式的值。
样例输入
3.5.2.-*7.+@
样例输出
16
提示
数据保证,1≤∣s∣≤50,答案和计算过程中的每一个值的绝对值不超过 109。
来源
#include<bits/stdc++.h>
using namespace std;
stack<int>st;
int main(){
string s;getline(cin,s);
int len=s.size(),num=0;
for(int i=0;i<len;i++){
if(s[i]=='@') break;
else{
if(s[i]>='0'&&s[i]<='9'){
num=num*10+s[i]-48;
}
else if(s[i]=='.'){
st.push(num);num=0;
}
else{
if(s[i]=='+'){
int a=st.top();st.pop();int b=st.top();st.pop();
st.push(a+b);
}
if(s[i]=='-'){
int a=st.top();st.pop();int b=st.top();st.pop();
st.push(b-a);
}
if(s[i]=='*'){
int a=st.top();st.pop();int b=st.top();st.pop();
st.push(a*b);
}
if(s[i]=='/'){
int a=st.top();st.pop();int b=st.top();st.pop();
st.push(b/a);
}
}
}
}
cout<<st.top();
return 0;}