洛谷P1449 后缀表达式 题解 栈
2024-09-06 15:01:59
题目链接:https://www.luogu.org/problem/P1449
这道题目我们只需要开一个栈,每次读取到一个数的话就将这个数 push 进栈。
因为提供给我们的时候已经是一个后续序列了,所以能保证每次遇到一个符号的时候栈中至少有2个元素。
我们先从栈中取出一个元素,设为 \(a\) ;再从栈中取出一个元素,设为 \(b\) 。那么,对于符号来说:
- 如果它是
+
,那么将 \(b+a\) 的结果 push 进栈; - 如果它是
-
,那么将 \(b-a\) 的结果 push 进栈; - 如果它是
*
,那么将 \(b*a\) 的结果 push 进栈; - 如果它是
/
,那么将 \(b/a\) 的结果 push 进栈。
最终能保证栈中只有一个元素,即栈顶元素,它就是我们后缀表达式的结果。
实现代码如下:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1010;
int n, c;
char s[maxn];
stack<int> stk;
int main() {
cin >> s;
n = strlen(s);
n --; // 因为最后一个是 '@'
int i = 0;
while (i < n) {
if (isdigit(s[i])) {
c = 0;
while (i < n && isdigit(s[i])) {
c = c * 10 + s[i] - '0';
i ++;
}
stk.push(c);
i ++;
}
else {
int a = stk.top(); stk.pop();
int b = stk.top(); stk.pop();
if (s[i] == '+') stk.push(b + a);
else if (s[i] == '-') stk.push(b - a);
else if (s[i] == '*') stk.push(b * a);
else stk.push(b / a);
i ++;
}
}
cout << stk.top() << endl;
return 0;
}
最新文章
- JS中判断null、undefined与NaN的方法
- [读书笔记]OSGI-灵活的类加载器架构
- HDU4647+贪心
- c#操作sqlite(包含中文支持)
- FileDirLocationOperator - 文件或目录位置操作.
- php中soap应用
- sql语句查询执行顺序
- JFrame图形界面 ----鼠标消息
- zip4j压缩
- MyBatis探究-----为实体类Bean取别名,配置typeAliases
- linux shell 多个命令一起执行的几种方法
- Http原理与实践
- 26-算法训练 Torry的困惑(基本型) 素数打表
- 关于eclipse 在创建一个新项目时自动出现的appcompat v7如何解决
- Android studio的一些常用快捷键
- BZOJ4698: Sdoi2008 Sandy的卡片(后缀数组 二分)
- SQL 单表分页存储过程和单表多字段排序和任意字段分页存储过程
- MBR为什么不支持3T硬盘
- [转]树莓派gpio口控制
- IO流对文件的读取操作
热门文章
- 函数的length属性
- ASP.NET+C#面试题
- GDSOI2017第三轮模拟4.21 总结
- python输出最大公约数和最小公倍数
- Codeforces Round #283 (Div. 2) A. Minimum Difficulty【一个数组定义困难值是两个相邻元素之间差的最大值。 给一个数组,可以去掉任意一个元素,问剩余数列的困难值的最小值是多少】
- 动态生成能够局部刷新的验证码【AJAX技术】---看了不懂赔你钱
- Mac上定时运行脚本工具--launchctl
- 【转载】Jmeter之Bean shell使用(二)
- 启动Jmeter录制代理进行录制,报 jmeter.protocol.http.proxy.ProxyControl
- 好玩又实用,阿里巴巴开源混沌工程工具 ChaosBlade