后缀表达式(栈)
P1449 后缀表达式
题目描述
所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。
本题中运算符仅包含 /
运算的规则一致)。
如:@
为表达式的结束符号。.
为操作数的结束符号。
输入格式
输入一行一个字符串
输出格式
输出一个整数,表示表达式的值。
输入输出样例 #1
输入 #1
3.5.2.-*7.+@
输出 #1
16
输入输出样例 #2
输入 #2
10.28.30./*7.-@
输出 #2
-7
说明/提示
数据保证,
分析
什么是后缀表达式,也叫逆波兰表示法(Reverse Polish Notation, RPN),是一种表达式的写法,其中运算符位于操作数的后面,不使用括号。与普通的中缀表达式(如:3*(5-2)+7)不同,后缀表达式的优点是计算过程不需要考虑运算符的优先级或括号的嵌套,按顺序逐步处理即可。
这里使用数组模拟栈来实现
代码
#include<iostream>
#include<cstring>
#include<string>
using namespace std;
const int N = 200;
long long stk[N], tt = 0;
int main() {
string s;
cin >> s;
int n = s.size();
int t = 0;
for(int i = 0;i < n && s[i] != '@';++i)
{
if(s[i] >= '0' && s[i] <= '9') t = t * 10 + s[i] - '0';
if(s[i] == '.') stk[++tt] = t,t = 0;
if(s[i] == '+') { int a = stk[tt]; --tt;stk[tt] += a; }
if(s[i] == '-') {int a = stk[tt]; --tt; stk[tt] -= a; }
if(s[i] == '*') {int a = stk[tt]; --tt; stk[tt] *= a; }
if(s[i] == '/') {int a = stk[tt]; --tt; stk[tt] /= a; }
//cout << stk[tt] << endl;
}
cout << stk[tt];
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!