题目链接: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 表达式求值 题解 栈/中缀转后缀的更多相关文章

  1. 洛谷 P1981 表达式求值

    P1981 表达式求值 题目描述 给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值. 输入输出格式 输入格式: 输入文件为 expr.in. 输入仅有一行,为需要你计算的表达式,表达式中只 ...

  2. 洛谷P1310 表达式的值 题解 栈/后缀表达式的应用

    题目链接:https://www.luogu.org/problem/P1310 本题涉及算法:栈.前缀表达式转后缀表达式,动态规划思想. 这道题目我思考了好长时间,第一时间让我做的话我也做不出来. ...

  3. 题解-洛谷P1981 表达式求值(模拟+处理优先级的递归)

    https://www.luogu.org/problemnew/show/P1981 (原题链接) 显然乘法的优先级高与加法,因此碰到乘号就要优先把一连串与乘号相连的数算出,很容易想到递归.可用普通 ...

  4. 洛谷 P1981 表达式求值(模拟)

    嗯... 题目链接:https://www.luogu.org/problem/P1981 这道题其实是数组模拟栈.首先处理乘法:注意从后往前处理,处理后归零.然后把数都加起来即可. AC代码: #i ...

  5. 洛谷p1981 表达式求值

    #include <iostream> #include <cstdio> #include <cstring> using namespace std; char ...

  6. 2019.06.17课件:[洛谷P1310]表达式的值 题解

    P1310 表达式的值 题目描述 给你一个带括号的布尔表达式,其中+表示或操作|,*表示与操作&,先算*再算+.但是待操作的数字(布尔值)不输入. 求能使最终整个式子的值为0的方案数. 题外话 ...

  7. 洛谷P1310 表达式的值——题解

    题目传送 题的难点:1.有运算优先级,不好判断.2.有破坏整体和谐性的讨厌的括号.3.不知道哪里要填数.4.要求方案数很大,搜索不会做呐. 发现难点1和2都是中缀表达式的缺点.转成后缀表达式后难点1. ...

  8. P1981 表达式求值

    P1981 表达式求值 题解 这个题联想一下  P1310 表达式的值  思路就是输入中缀式,转成后缀式,然后按后缀式计算,完美!!       but!! 会严重RE,因为你可能会输入中缀式的时候输 ...

  9. Matrix Chain Multiplication(表达式求值用栈操作)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1082 Matrix Chain Multiplication Time Limit: 2000/100 ...

随机推荐

  1. poj 2288 Islands and Bridges——状压dp(哈密尔顿回路)

    题目:http://poj.org/problem?id=2288 不知为什么记忆化搜索就是WA得不得了! #include<iostream> #include<cstdio> ...

  2. leetcode 31-40 easy

    38.Count and Say The count-and-say sequence is the sequence of integers with the first five terms as ...

  3. ACdream 1101 线段树

    题目链接 瑶瑶想要玩滑梯 Time Limit: 10000/5000MS (Java/Others)Memory Limit: 512000/256000KB (Java/Others) Submi ...

  4. zoj 1028 Flip and Shift(数学)

    Flip and Shift Time Limit: 2 Seconds      Memory Limit: 65536 KB This puzzle consists of a random se ...

  5. BZOJ 4420二重镇题解

    链接 思路借鉴了这个博客: 我们可以想到状压dp 用一个十进制数来表示状态,即第i位表示位置i处的物品等级 用f[i][j][k]表示第i天,仓库的物品等级为j,状态为k时的最大收益 但是状态数貌似很 ...

  6. 阿里云SaaS生态战略发布,用宜搭5分钟部署OCR文字识别

    7月26日,在阿里云合作伙伴峰会上,阿里云发布SaaS生态战略:通过SaaS加速器为合作伙伴提供应用开发.集成.上云.售卖的全链路解决方案,提升开发效率和集成效率,缩短商业化周期. 作为阿里SaaS加 ...

  7. 【JZOJ4811】【NOIP2016提高A组五校联考1】排队

    题目描述 输入 输出 样例输入 5 4 1 2 1 3 3 4 3 5 1 4 2 4 1 2 2 5 样例输出 3 1 1 2 数据范围 样例解释 解法 可推知原树可以转换为一个序列,即优先序列: ...

  8. 公司mysql问题二

    这个问题解决:

  9. Struts → 《Struts2程序开发》教材大纲

  10. More Effective C++: 05技术(30-31)

    30:Proxy classes 代理类 在C++中使用变量作为数组大小是违法的,也不允许在堆上分配多维数组: int data[dim1][dim2]; int *data = new int[di ...