逆波兰式->题解
1.P9748 [CSP-J 2023] 小苹果 题解2.P9749 [CSP-J 2023] 公路 题解3.P9751 [CSP-J 2023] 旅游巴士 题解4.P9750 [CSP-J 2023] 一元二次方程 题解5.P8813 [CSP-J 2022] 乘方 题解6.P8814 [CSP-J 2022] 解密 题解7.P8815 [CSP-J 2022] 逻辑表达式 题解8.P8816 [CSP-J 2022] 上升点列 题解9.P7909 [CSP-J 2021] 分糖果10.P7910 [CSP-J 2021] 插入排序 题解11.P7911 [CSP-J 2021] 网络连接 题解12.P7912 [CSP-J 2021] 小熊的果篮 题解13.P7071 [CSP-J2020] 优秀的拆分 题解14.P7072 [CSP-J2020] 直播获奖 题解15.[CSP-J2020] 表达式 题解16.P7074 [CSP-J2020] 方格取数 题解17.P5661 [CSP-J2019] 公交换乘 题解18.P5662 [CSP-J2019] 纪念品 题解19.P5663 [CSP-J2019] 加工零件 题解20.P5660 [CSP-J2019] 数字游戏 题解21.P11227 [CSP-J 2024] 扑克牌 题解22.P11228 [CSP-J 2024] 地图探险 题解23.P11229 [CSP-J 2024] 小木棍 题解24.P10124 [USACO18OPEN] Family Tree B 题解25.P9008 [入门赛 #9] 大碗宽面26.题解:AT_abc018_4 [ABC018D] バレンタインデー27.正规数的判定->题解
28.逆波兰式->题解
29.题解:P11372 「CZOI-R2」加训30.题解:AT_abc032_d [ABC032D] ナップサック問題31.题解:P11389 [COCI 2024/2025 #1] 等级 / Hijerarhija32.题解:B4070 [GESP202412 五级] 奇妙数字前文
看到这种表达式的题目,第一时间就想到了栈,
尤其是这种
关于后缀表达式的题目.
理论
用栈来模拟后缀表达式是非常便捷的.
对于后缀表达式,当遇到数字时,将数字压入栈中,如果是运算
符号,就将栈顶的两个元素弹出,根据符号进行运算,再把值放
回栈中.
代码
再进行求值.
减去第一个,即栈顶元素.因为第二个元素是前面求完的值,而栈顶
元素是新加进来的.
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<stack> using namespace std; stack<int> st; // 存数字 string s1, s; int main() { getline(cin, s1); // 原式 for (int i = 0; i < s1.size(); i++) if (s1[i] != ' ') s += s1[i]; // 去空格 for (int i = 0; i < s.size(); i++) { if (s[i] >= '0' && s[i] <= '9') st.push((s[i] - '0') % 10); // 一位数字 取模 else { // 遇到符号 int num1 = st.top();st.pop(); // 先取栈顶的两位数字 int num2 = st.top();st.pop(); int res = 0; switch (s[i]) { // 根据符号来决定值 case '+': res = num2 + num1;break; case '-': res = num2 - num1;break; case '*': res = num2 * num1;break; } // 取模时注意保证符号是正的 st.push((res + 10) % 10); } } // 最终结果也要取模 printf("%d", st.top() % 10); return 0; }
本文作者:panda-lyl
本文链接:https://www.cnblogs.com/panda-lyl/p/18577669
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步