[AcWing 3302] 表达式求值
作者:互联网
点击查看代码
#include<iostream>
#include<stack>
#include<cstring>
#include<unordered_map>
using namespace std;
stack<int> nums;
stack<char> op;
unordered_map<char, int> h{ {'+', 1}, {'-', 1}, {'*', 2}, {'/', 2} };
void eval()
{
int b = nums.top(); nums.pop();
int a = nums.top(); nums.pop();
char p = op.top(); op.pop();
int r = 0;
if (p == '+') r = a + b;
if (p == '-') r = a - b;
if (p == '*') r = a * b;
if (p == '/') r = a / b;
nums.push(r);
}
int main()
{
string s;
cin >> s;
for (int i = 0; i < s.size(); i ++) {
if (isdigit(s[i])) {
int x = 0, j = i;
while (j < s.size() && isdigit(s[j])) {
x = x * 10 + s[j] - '0';
j ++;
}
nums.push(x);
i = j - 1;
}
else if (s[i] == '(') op.push(s[i]);
else if (s[i] == ')') {
while (op.top() != '(') eval();
op.pop();
}
else {
while (op.size() && h[op.top()] >= h[s[i]]) eval();
op.push(s[i]);
}
}
while (op.size()) eval();
cout << nums.top();
return 0;
}
标签:size,nums,int,top,pop,求值,AcWing,3302,op 来源: https://www.cnblogs.com/wKingYu/p/16209222.html