Pagini recente » Cod sursa (job #112792) | Cod sursa (job #24730) | Cod sursa (job #885169) | Cod sursa (job #2042283) | Cod sursa (job #3230784)
#include <bits/stdc++.h>
using namespace std;
string s;
int p;
int f1();
int f2();
int f3();
int f1() {
int x = f2();
while (p < (int) s.size() && s[p] == '+' || s[p] == '-') {
int sgn = +1;
if (s[p] == '-') {
sgn = -1;
}
p++;
x += sgn * f2();
}
return x;
}
int f2() {
int x = f3();
while (p < (int) s.size() && s[p] == '*' || s[p] == '/') {
int type = 0;
if (s[p] == '/') {
type = 1;
}
p++;
int y = f3();
if (type == 0) {
x *= y;
} else {
x /= y;
}
}
return x;
}
int f3() {
assert(p < (int) s.size());
if (s[p] == '-') {
p++;
return -f3();
}
if (s[p] == '+') {
p++;
return -f3();
}
if (s[p] == '(') {
p++;
int sol = f1();
assert(p < (int) s.size());
assert(s[p] == ')');
p++;
return sol;
}
int nr = 0;
while (p < (int) s.size() && '0' <= s[p] && s[p] <= '9') {
nr = 10 * nr + s[p] - '0';
p++;
}
return nr;
}
int main() {
#ifdef INFOARENA
freopen ("evaluare.in", "r", stdin);
freopen ("evaluare.out", "w", stdout);
#endif
cin >> s;
cout << f1() << "\n";
return 0;
}