洛谷题单指南-线性表-P1449 后缀表达式
原题链接:https://www.luogu.com.cn/problem/P1449
题意解读:计算后缀表达式,堆栈的典型应用。
解题思路:
本题要解决两个问题:字符串的读取、后缀表达式的计算,整个过程如下,
要将字符串拆接触操作数、操作符,将操作数放入堆栈,操作符用于计算
遍历每一个字符:
1、如果是数字,则进行数字计算:初始定义整数num=0,遇到的数字字符c,需要num = num * 10 + c - '0'
如此操作即可将数字字符串转为整数;
2、如果是'.',将num的值放入堆栈;
3、如果是'+'、'-'、'*'、'/',从堆栈取栈顶两个数进行计算,结果再次入栈
4、如果是'@'则结束
最后输出堆栈栈顶元素,即为结果。
100分代码:
#include <bits/stdc++.h>
using namespace std;
string s;
stack<int> stk;
void compute(char op)
{
int b = stk.top(); stk.pop();
int a = stk.top(); stk.pop();
int result;
if(op == '+') result = a + b;
else if(op == '-') result = a - b;
else if(op == '*') result = a * b;
else result = a / b;
stk.push(result);
}
int main()
{
cin >> s;
int num = 0;
for(int i = 0; i < s.size(); i++)
{
if(s[i] >= '0' && s[i] <= '9') //如果是数字,进行字符串转数字计算
{
num = 10 * num + s[i] - '0';
}
else if(s[i] == '.') //如果是.,则将读取完毕的数字压栈
{
stk.push(num);
num = 0; //num清0
}
else if(s[i] == '@') break;
else compute(s[i]); //+、-、*、/符号则进行计算
}
cout << stk.top();
return 0;
}