洛谷P1981 表达式求值 题解 栈/中缀转后缀
题目链接:https://www.luogu.org/problem/P1981
这道题目就是一道简化的中缀转后缀,因为这里比较简单,只有加号(+)和乘号(*),所以我们只需要开一个存放数值的栈就可以了(如果涉及加减乘除则需要开另一个用于存放符号的栈)。
首先,我们读取一个整数并将其入栈。
然后接下来我们就是一个符号+一个数字这样的读取了。
每次我们读取一个符号和一个数字num:
- 如果符号是
+,则判断一下当前栈中有多少元素,如果有超过1个元素,则将栈中所有元素出栈,并将它们的和入栈; - 如果符号是
*,则取出栈顶元素,并且取出来的栈顶元素与num的乘积在入栈。
当输入结束是,栈中的所有元素的乘积就是我们的答案。
实现代码如下:
#include <bits/stdc++.h>
using namespace std;
const int MOD = 10000;
int num;
char c;
stack<int> stk;
int main() {
scanf("%d", &num);
num %= MOD;
stk.push(num);
while ( (c = getchar()) != EOF ) {
if (c != '*' && c != '+') break;
scanf("%d", &num);
num %= MOD;
if (c == '+') {
while (stk.size() > 1) {
int a = stk.top(); stk.pop();
int b = stk.top(); stk.pop();
stk.push( (a + b) % MOD );
}
stk.push(num);
}
else if (c == '*') {
int a = stk.top(); stk.pop();
stk.push(a * num % MOD);
}
}
while (stk.size() > 1) {
int a = stk.top(); stk.pop();
int b = stk.top(); stk.pop();
stk.push( (a + b) % MOD );
}
printf("%d\n", stk.top());
return 0;
}
洛谷P1981 表达式求值 题解 栈/中缀转后缀的更多相关文章
- 洛谷 P1981 表达式求值
P1981 表达式求值 题目描述 给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值. 输入输出格式 输入格式: 输入文件为 expr.in. 输入仅有一行,为需要你计算的表达式,表达式中只 ...
- 洛谷P1310 表达式的值 题解 栈/后缀表达式的应用
题目链接:https://www.luogu.org/problem/P1310 本题涉及算法:栈.前缀表达式转后缀表达式,动态规划思想. 这道题目我思考了好长时间,第一时间让我做的话我也做不出来. ...
- 题解-洛谷P1981 表达式求值(模拟+处理优先级的递归)
https://www.luogu.org/problemnew/show/P1981 (原题链接) 显然乘法的优先级高与加法,因此碰到乘号就要优先把一连串与乘号相连的数算出,很容易想到递归.可用普通 ...
- 洛谷 P1981 表达式求值(模拟)
嗯... 题目链接:https://www.luogu.org/problem/P1981 这道题其实是数组模拟栈.首先处理乘法:注意从后往前处理,处理后归零.然后把数都加起来即可. AC代码: #i ...
- 洛谷p1981 表达式求值
#include <iostream> #include <cstdio> #include <cstring> using namespace std; char ...
- 2019.06.17课件:[洛谷P1310]表达式的值 题解
P1310 表达式的值 题目描述 给你一个带括号的布尔表达式,其中+表示或操作|,*表示与操作&,先算*再算+.但是待操作的数字(布尔值)不输入. 求能使最终整个式子的值为0的方案数. 题外话 ...
- 洛谷P1310 表达式的值——题解
题目传送 题的难点:1.有运算优先级,不好判断.2.有破坏整体和谐性的讨厌的括号.3.不知道哪里要填数.4.要求方案数很大,搜索不会做呐. 发现难点1和2都是中缀表达式的缺点.转成后缀表达式后难点1. ...
- P1981 表达式求值
P1981 表达式求值 题解 这个题联想一下 P1310 表达式的值 思路就是输入中缀式,转成后缀式,然后按后缀式计算,完美!! but!! 会严重RE,因为你可能会输入中缀式的时候输 ...
- Matrix Chain Multiplication(表达式求值用栈操作)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1082 Matrix Chain Multiplication Time Limit: 2000/100 ...
随机推荐
- 基于keras中IMDB的文本分类 demo
本次demo主题是使用keras对IMDB影评进行文本分类: import tensorflow as tf from tensorflow import keras import numpy a ...
- VMware安装Centos后无法上网
参考于: http://www.xpxt.net/xtjc/win8/04194953.html
- nested exception is org.hibernate.MappingException解决方案
1.可能是因为映射文件( Order.hbm.xm)配置的class路径出错 <hibernate-mapping> <class name="com.web.bean.O ...
- Redis 源码学习之 Redis 事务Nosql
Redis事务提供了一种将多个命令请求打包,然后一次性.按照顺序地执行多个命令的机制,并且在事务执行的期间,服务器不会中断事务而去执行其他不在事务中的命令请求,它会把事务中所有的命令都执行完毕才会去执 ...
- Path Sum II深度优先找路径
Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given su ...
- Python内存机制简介
1: 变量不是盒子,应该把变量视作便利贴.变量只不过是标注,所以无法阻止为对象贴上多个标注.标注就是别名: >>> a = [1, 2, 3] >>> b = a ...
- Add Binary字符数字相加,字符串合成
Given two binary strings, return their sum (also a binary string). For example,a = "11"b = ...
- poj 2385【动态规划】
poj 2385 Apple Catching Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14007 Accepte ...
- Java转iOS-第一个项目总结(2):遇到问题和解决方案
目录1.UITableView滑动卡顿的优化 2.右滑手势返回 3.添加页面统计 4.debug版和release版 5.关于页面刷新 6.关于页面布局 7.推荐博客 遇到问题和解决方案 本文是Jav ...
- HZOJ 连连看
考场几乎想到了正解,然而我也不知道当时在想啥,在没有证伪的情况下只是觉得无法实现就否了…… 最后打的好象是达哥说的O(4*15*n*m),复杂度不是很会证反正T成了暴力…… 题解: 对于测试点8,9, ...