【STL容器[栈]】后缀表达式求值
2024-07-14 10:52:37
发布于:北京
题目描述
所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。
如:3∗(5–2)+7 对应的后缀表达式为:3.5.2.−∗7.+@。’@’为表达式的结束符号。‘.’为操作数的结束符号。
给出一个后缀表达式,求出计算的值。
输入格式
一个字符串,长度不超过 50,仅包含数字字符、'.'、'@'、'+'、'-'、'*'。
数据保证整个运算过程均在 int 范围,保证字符串一定是一个正确的后缀表达式
输出格式
输出后缀表达式的值。
样例组输入#1
3.5.2.-*7.+@
样例组输出#1
16
AC题解⬇
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
cin >> s;
int num = 0;
stack<int>st;
for(int i = 0;i < s.size()-1;i++){
if(s[i] == '.'){
//推数字
st.push(num);
num = 0;
}else if(s[i] >= '0' && s[i] <= '9'){
//数字增加
num = num * 10 + s[i] - '0';
}else{
//根据符号进行运算
int r = st.top();
st.pop();
int l = st.top();
st.pop();
if(s[i] == '-'){
st.push(l-r);
}else if(s[i] == '+'){
st.push(l+r);
}else if(s[i] == '*'){
st.push(l*r);
}
}
}
cout << st.top();
return 0;
}
比较接近的题目链接⬇(用以上代码会有RE)
https://www.acgo.cn/problemset/info/21333
这里空空如也
有帮助,赞一个