洛谷P1449 后缀表达式 题解 栈
题目链接: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;
}
洛谷P1449 后缀表达式 题解 栈的更多相关文章
- 洛谷P1449——后缀表达式(栈模拟)
题目描述 所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级). 如:3*(5–2)+7对应 ...
- 【题解】洛谷 P1449 后缀表达式
目录 题目 思路 \(Code\) 题目 P1449 后缀表达式 思路 栈.题目说的不是很清楚,没说包含什么操作.除法用整数除法就行. 先string读入字符串,然后从前往后看如果是个数字就入栈,如果 ...
- STL Stack(栈)学习笔记 + 洛谷 P1449 后缀表达式
稍微看了看刘汝佳的白皮书,“实用主义”的STL实在是香到我了,而且在实验室大佬的推荐下我开始了stl的学习. 每篇附带一个题目方便理解,那行,直接开始. 毕竟是实用主义,所以就按照给的题目的例子来理解 ...
- 洛谷 P1449 后缀表达式
题目描述 所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级). 如:3*(5–2)+7对应 ...
- 洛谷 P1449 后缀表达式 Label:表达式计算系列
题目描述 所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级). 如:3*(5–2)+7对应 ...
- [题解]P1449 后缀表达式(栈)
题目链接:P1449 后缀表达式 题目描述: 所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优 ...
- 【洛谷】P1449 后缀表达式
P1449 后缀表达式 分析: 简单的模拟题. 熟练容器stack的话很容易解决. stack,栈,有先进后出的特性. 比如你有一个箱子,你每放进第一个数时,就往箱底放,放第二个数时就在第一个数的上面 ...
- 【洛谷p1981】表达式求值
题前废话: 咱也不知道咱写了个什么神奇的代码导致_rqy都看不明白它是怎么re掉的, 代码的大致思路是这样的:对于这样一个中缀表达式,先转化成它的后缀表达式的形式,然后利用P1449 后缀表达式 这道 ...
- 洛谷P2832 行路难 分析+题解代码【玄学最短路】
洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座 ...
随机推荐
- leetcode 350 easy
350. Intersection of Two Arrays II class Solution { public: vector<int> intersect(vector<in ...
- HR招聘_(六)_招聘方法论(面试环节·面试方法)
面试方法:常用行为面试和压力面试 行为面试法 定义: 通过要求面试对象描述其过去某项工作或者生活经历的具体情况来了解面试对象各方面素质特征的方法.行为面试法的基本假设是:一个人过去的行为可以预测这个人 ...
- Node.js的框架-express
Node.js的框架 express 是第三方的 express const express=require('express'); const app=express(); const PORT=3 ...
- Ubuntu 安装 setuptools
Setuptools的官方页面 Easily download, build, install, upgrade, and uninstall Python packages 它是一个对python的 ...
- 扩展 Microsoft.Owin.Security
微软在 OWIN 框架中对 OAuth 认证的支持非常好, 使用现有的 OWIN 中间件可以做到: 使用 Microsoft.Owin.Security.OAuth 搭建自己的 OAuth2 服务端, ...
- DirectX11笔记(九)--Direct3D渲染5--CONSTANT BUFFERS
原文:DirectX11笔记(九)--Direct3D渲染5--CONSTANT BUFFERS 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u0 ...
- JavaScript 生成32位UUID
function uuid(){ var len=32; //32长度 var radix=16; //16进制 var chars='0123456789ABCDEFGHIJKLMNOPQRSTUV ...
- conda 下配置环境
conda list 查看已有环境(感觉anaconda 中查看的不全,只有指定路径的,但是这个路径和默认创建的路径不一样 然后我发现 要安装traits 库必须要的是PyQt4 但是我的py3下只有 ...
- python 切片索引
- Python PEP8标准
1.编码 如无特殊情况,文件一律使用utf-8编码 如无特殊情况,文件头部必须添加# -*- coding:utf-8 -*- 标志 2.代码 统一使用四个空格缩进 每行代码不超过80个字符 自然语言 ...