Pagini recente » Monitorul de evaluare | Sedinta 2008-10-21 | Cod sursa (job #1683007) | Cod sursa (job #1682882) | Cod sursa (job #282820)
Cod sursa(job #282820)
#include <fstream>
#include <cstring>
#include <algorithm>
using namespace std;
#define FIN "evaluare.in"
#define FOUT "evaluare.out"
#define MAX_N 100015
int N, pos;
char exp[MAX_N];
void read() {
scanf("%s", exp);
strcat(exp, "~");
}
int eval1();
int eval3() {
int ret = 0;
if (exp[pos] == '(') {
++pos;
ret = eval1();
++pos;
return ret;
}
while ('0' <= exp[pos] && exp[pos] <= '9')
ret = ret * 10 + exp[pos++] - '0';
return ret;
}
int eval2() {
int ret;
ret = eval3();
while (exp[pos] == '*' || exp[pos] == '/') {
if (exp[pos] == '*') {
++pos;
ret *= eval3();
}
else {
++pos;
int tmp = eval3();
ret /= tmp;
}
}
return ret;
}
int eval1() {
int ret;
ret = eval2();
while (exp[pos] == '+' || exp[pos] == '-') {
if (exp[pos] == '+') {
++pos;
ret += eval2();
}
else {
++pos;
ret -= eval2();
}
}
return ret;
}
void solve() {
printf("%d\n", eval1());
}
int main() {
freopen(FIN, "r", stdin);
freopen(FOUT, "w", stdout);
read();
solve();
return 0;
}