Pagini recente » Cod sursa (job #3143161) | Cod sursa (job #1615339) | Cod sursa (job #555992) | Cod sursa (job #1213465) | Cod sursa (job #3223070)
#include <iostream>
#include <vector>
#include <algorithm>
#include <cassert>
#warning That's the baby, that's not my baby
typedef long long ll;
int ptr = 0;
std::string s;
int eval();
int termen();
int factor();
int getnr() {
int ret = 0;
while (ptr < (int) s.size() && isdigit(s[ptr])) {
ret = ret * 10 + s[ptr++] - '0';
}
return ret;
}
int factor() {
int ret = 0;
if (ptr < (int) s.size()) {
if (s[ptr] == '(') {
ptr++;
ret = eval();
ptr++;
} else {
ret = getnr();
}
}
return ret;
}
int termen() {
int ret = factor();
while (ptr < (int) s.size() && (s[ptr] == '*' || s[ptr] == '/')) {
if (s[ptr] == '*') {
ptr++;
ret *= factor();
} else {
ptr++;
ret /= factor();
}
}
return ret;
}
int eval() {
int ret = termen();
while (ptr < (int) s.size() && (s[ptr] == '+' || s[ptr] == '-')) {
if (s[ptr] == '+') {
ptr++;
ret += termen();
} else {
ptr++;
ret -= termen();
}
}
return ret;
}
int main() {
std::ios_base::sync_with_stdio(false);
std::cin.tie(0);
std::cout.tie(0);
#ifndef LOCAL
freopen("evaluare.in", "r", stdin);
freopen("evaluare.out", "w", stdout);
#endif
std::cin >> s;
std::cout << eval();
return 0;
}