Pagini recente » Cod sursa (job #1532970) | Cod sursa (job #988029) | Cod sursa (job #2086528) | Cod sursa (job #1546702) | Cod sursa (job #2184306)
#include <bits/stdc++.h>
using namespace std;
using uint = unsigned int;
using ll = long long;
using pii = pair<int, int>;
#define dbg(x) cerr<<#x": "<<(x)<<'\n'
#define dbg_v(x, n) {cerr<<#x"[]: ";for(long long _=0;_<n;++_)cerr<<(x)[_]<<' ';cerr<<'\n';}
#define all(v) v.begin(), v.end()
#define fi first
#define se second
#define INF 2000000010
#define MOD 1000000007
#define ST_SIZE 1048600
#define QMAX
#define LMAX 1010
#define NMAX 1010
vector<char> operators;
vector<int> nums;
int priority[300];
void pop() {
int b = nums.back(); nums.pop_back();
int a = nums.back(); nums.pop_back();
char op = operators.back(); operators.pop_back();
int ret;
switch(op) {
case '+': ret = a + b; break;
case '-': ret = a - b; break;
case '*': ret = a * b; break;
case '/': ret = a / b; break;
}
nums.push_back(ret);
}
int main()
{
freopen("evaluare.in", "r", stdin);
freopen("evaluare.out", "w", stdout);
ios_base::sync_with_stdio(false);
int i, x;
string s;
priority['('] = -1;
priority['+'] = priority['-'] = 1;
priority['*'] = priority['/'] = 2;
cin >> s;
s = '(' + s + ')';
for(i = 0; i < s.length(); ) {
if(s[i] == '(') {
operators.push_back('(');
++i;
} else if(s[i] == ')') {
while(!operators.empty() && operators.back() != '(') pop();
operators.pop_back();
++i;
} else if('0' <= s[i] && s[i] <= '9') {
x = 0;
while('0' <= s[i] && s[i] <= '9') x = x * 10 + s[i] - '0', ++i;
nums.push_back(x);
} else {
while(!operators.empty() && priority[operators.back()] >= priority[s[i]]) pop();
operators.push_back(s[i++]);
}
}
cout << nums.front() << '\n';
return 0;
}