Pagini recente » Cod sursa (job #2171587) | Cod sursa (job #2677053) | Cod sursa (job #1726764) | Cod sursa (job #56924) | Cod sursa (job #1512552)
#include <cstdio>
#include <cstring>
#include <stack>
#include <vector>
using namespace std;
char s[100001];
stack <char> op;
vector <int> rasp;
vector <int> polo;
bool comp(char t) {
int i, j;
if(t == '-' || t == '+')
j = 1;
if(t == '*' || t == '/')
j = 2;
if(t == '(')
j = 0;
t = op.top();
if(t == '-' || t == '+')
i = 1;
if(t == '*' || t == '/')
i = 2;
if(t == '(')
i = 0;
return i >= j;
}
int calcul(int a, int b, char t) {
if(t == '-') {
return a - b;
}
if(t == '+') {
return a + b;
}
if(t == '/') {
return a / b;
}
if(t == '*') {
return a * b;
}
}
int main() {
freopen("evaluare.in", "r", stdin);
freopen("evaluare.out", "w", stdout);
gets(s);
int n;
n = strlen(s);
for(int i = 0; i < n; ++ i) {
if('0' <= s[i] && s[i] <= '9') {
int nr = 0;
while('0' <= s[i] && s[i] <= '9') {
nr = nr * 10 + (s[i] - '0');
++ i;
}
polo.push_back(nr);
-- i;
} else
if(s[i] == '(') {
op.push('(');
} else
if(s[i] == ')') {
while(op.top() != '(') {
polo.push_back(-op.top());
op.pop();
}
op.pop();
} else {
while(!op.empty() && comp(s[i])) {
polo.push_back(-op.top());
op.pop();
}
op.push(s[i]);
}
}
while(!op.empty()) {
polo.push_back(-op.top());
op.pop();
}
n = polo.size();
for(int i = 0; i < n; ++ i) {
if(polo[i] >= 0) {
//printf("%d ", polo[i]);
rasp.push_back(polo[i]);
} else {
//printf("%c ", polo[i]);
int q, m;
m = rasp.size();
q = calcul(rasp[m - 2], rasp[m - 1], -polo[i]);
rasp.pop_back();
rasp.pop_back();
rasp.push_back(q);
}
}
printf("%d\n", rasp[0]);
return 0;
}