题目链接: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;
}

最新文章

  1. JS中判断null、undefined与NaN的方法
  2. [读书笔记]OSGI-灵活的类加载器架构
  3. HDU4647+贪心
  4. c#操作sqlite(包含中文支持)
  5. FileDirLocationOperator - 文件或目录位置操作.
  6. php中soap应用
  7. sql语句查询执行顺序
  8. JFrame图形界面 ----鼠标消息
  9. zip4j压缩
  10. MyBatis探究-----为实体类Bean取别名,配置typeAliases
  11. linux shell 多个命令一起执行的几种方法
  12. Http原理与实践
  13. 26-算法训练 Torry的困惑(基本型) 素数打表
  14. 关于eclipse 在创建一个新项目时自动出现的appcompat v7如何解决
  15. Android studio的一些常用快捷键
  16. BZOJ4698: Sdoi2008 Sandy的卡片(后缀数组 二分)
  17. SQL 单表分页存储过程和单表多字段排序和任意字段分页存储过程
  18. MBR为什么不支持3T硬盘
  19. [转]树莓派gpio口控制
  20. IO流对文件的读取操作

热门文章

  1. 函数的length属性
  2. ASP.NET+C#面试题
  3. GDSOI2017第三轮模拟4.21 总结
  4. python输出最大公约数和最小公倍数
  5. Codeforces Round #283 (Div. 2) A. Minimum Difficulty【一个数组定义困难值是两个相邻元素之间差的最大值。 给一个数组,可以去掉任意一个元素,问剩余数列的困难值的最小值是多少】
  6. 动态生成能够局部刷新的验证码【AJAX技术】---看了不懂赔你钱
  7. Mac上定时运行脚本工具--launchctl
  8. 【转载】Jmeter之Bean shell使用(二)
  9. 启动Jmeter录制代理进行录制,报 jmeter.protocol.http.proxy.ProxyControl
  10. 好玩又实用,阿里巴巴开源混沌工程工具 ChaosBlade