💡 Knowledge is power, Mr.Pa a|

Panda_LYL

园龄:4个月粉丝:0关注:0

2024-11-29 22:05阅读: 16评论: 0推荐: 0

逆波兰式->题解

前文

看到这种表达式的题目,第一时间就想到了栈,
尤其是这种

关于后缀表达式的题目.

理论

用栈来模拟后缀表达式是非常便捷的.

对于后缀表达式,当遇到数字时,将数字压入栈中,如果是运算

符号,就将栈顶的两个元素弹出,根据符号进行运算,再把值放

回栈中.

代码

tips1:由于题目中的空格在求值时有点麻烦,可以先将空格删除,

再进行求值.

tips2:在进行运算时,尤其是减法时,应该用第二个取出来的元素

减去第一个,即栈顶元素.因为第二个元素是前面求完的值,而栈顶

元素是新加进来的.

tips3:取模时,注意保证结果为正数.

#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 中国大陆许可协议进行许可。

posted @   Panda_LYL  阅读(16)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起