☰
洛谷 P1449:后缀表达式 ← STL stack
2026/10/12 6:20:41 网站建设 项目流程

【题目来源】
https://www.luogu.com.cn/problem/P1449

【题目描述】
所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右进行(不用考虑运算符的优先级)。
本题中运算符仅包含 +-*/。保证对于 / 运算除数不为 0。特别地,其中 / 运算的结果需要向 0 取整(即与 C++/运算的规则一致)。
如:3*(5-2)+7 对应的后缀表达式为:3.5.2.-*7.+@。在该式中,@为表达式的结束符号。.为操作数的结束符号。

【输入格式】
输入一行一个字符串 s,表示后缀表达式。

【输出格式】
输出一个整数,表示表达式的值。

【输入样例1】
3.5.2.-*7.+@

【输出样例1】
16

【输入样例2】
10.28.30./*7.-@

【输出样例2】
-7

【说明/提示】
数据保证,1≤∣s∣≤50,答案和计算过程中的每一个值的绝对值不超过 10^9。

【算法分析】
● STL stack:https://cplusplus.com/reference/stack/stack/

【算法代码】

#include <bits/stdc++.h> using namespace std; stack<int> stk; string s; int x; int main() { cin>>s; for(char c:s) { if(c>='0' && c<='9') { x=x*10+(c-'0'); } else if(c=='.') { stk.push(x); x=0; } else if(c=='@') { break; } else { int ri=stk.top(); stk.pop(); int le=stk.top(); stk.pop(); int res=0; if(c=='+') res=le+ri; if(c=='-') res=le-ri; if(c=='*') res=le*ri; if(c=='/') res=le/ri; stk.push(res); } } cout<<stk.top()<<endl; return 0; } /* in: 3.5.2.-*7.+@ out: 16 */





【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/148987127
https://blog.csdn.net/hnjzsyjyj/article/details/130522133
https://www.luogu.com.cn/problem/solution/P1449
https://blog.csdn.net/hnjzsyjyj/article/details/145522672




需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询