Pagini recente » Cod sursa (job #2755195) | Cod sursa (job #1677861) | Cod sursa (job #514486) | Cod sursa (job #1622905) | Cod sursa (job #2870961)
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cassert>
using namespace std;
const int N = 100000 + 7;
char s[N];
int n;
int p;
int readNum() {
assert('0' <= s[p] && s[p] <= '9');
int sol = 0;
while (p < n && '0' <= s[p] && s[p] <= '9') {
sol = 10 * sol + s[p++] - '0';
}
return sol;
}
int solve() {
assert(p < n);
int sol = 1;
while (p < n && (s[p] == '+' || s[p] == '-')) {
if (s[p++] == '-') {
sol *= -1;
}
}
if (s[p] == '(') {
p++;
sol *= solve();
assert(s[p] == ')');
p++;
}
else {
sol *= readNum();
}
while (p < n && (s[p] == '*' || s[p] == '/')) {
bool is_mul = (s[p++] == '*');
int cur = 1;
assert(p < n);
if (s[p] == '(') {
p++;
cur = solve();
assert(s[p] == ')');
p++;
}
else {
cur = readNum();
}
if (is_mul) {
sol *= cur;
}
else {
sol /= cur;
}
}
if (p < n && (s[p] == '+' || s[p] == '-')) {
sol += solve();
}
return sol;
}
int main() {
freopen("evaluare.in", "r", stdin);
freopen("evaluare.out", "w", stdout);
scanf("%s", &s);
n = strlen(s);
cout << solve() << "\n";
}