Pagini recente » Monitorul de evaluare | Cod sursa (job #363487) | Cod sursa (job #488519) | Istoria paginii utilizator/salamstan504 | Cod sursa (job #201271)
Cod sursa(job #201271)
#include <cstdio>
const int E_MAX = 100001;
char e[E_MAX];
char *p;
int termen();
int factor();
int eval() {
int r = termen();
while (*p == '+' || *p == '-') {
++p;
if (*(p-1) == '+')
r += termen(); else
r -= termen();
}
return r;
}
int termen() {
int r = factor();
while (*p == '*' || *p == '/') {
++p;
if (*(p-1) == '*')
r *= factor(); else
r /= factor();
}
return r;
}
int factor() {
int r = 0;
if (*p == '(') {
++p;
r = eval();
++p;
} else {
for (; '0' <= *p && *p <= '9'; ++p) r = r * 10 + *p - '0';
}
return r;
}
int main() {
freopen("evaluare.in","rt",stdin);
freopen("evaluare.out","wt",stdout);
fgets(e,E_MAX,stdin);
p = e;
printf("%d\n",eval());
return 0;
}