AcWing 3302. 表达式求值
原题链接
简单
作者:
橙外
,
2021-03-23 16:26:26
,
所有人可见
,
阅读 463
中缀表达式求值
给定一个表达式,其中运算符仅包含 +,-,*,/(加 减 乘 整除),可能包含括号,请你求出表达式的最终值。
AC代码
#include <iostream>
#include <string>
#include <cstring>
#include <stack>
#include <algorithm>
#include <unordered_map>
using namespace std;
stack < int > num;
stack < char > op;
void work()
{
auto b = num.top();num.pop();
auto a = num.top();num.pop();
auto c = op.top(); op.pop();
int x;
if (c == '+') x = a + b;
else if (c == '-') x = a - b;
else if (c == '*') x = a * b;
else if (c == '/') x = a / b;
else if (c == '^') x = a ^ b;
num.push(x);
}
int main()
{
unordered_map < char , int > g{{'+',1} ,{'-',1} ,{'*',2} ,{'/',2} ,{'^',3}};
string st;
cin >> st;
for (int i = 0; i < st.size(); i++)
{
char c = st[i];
if (isdigit(c))
{
int x = 0;
while (i < st.size() && isdigit(st[i]))
x = x * 10 + st[i ++ ] - '0';
i--;
num.push(x);
}
else if (c == '(') op.push(c);
else if (c == ')')
{
while (op.top() != '(') work();
op.pop();
}
else
{
while (op.size() && g[op.top()] >= g[c]) work();
op.push(c);
}
}
while (op.size()) work();
cout << num.top();
return 0;
}
给你看个好东西!!!
好东西
???