Pagini recente » Cod sursa (job #1876628) | Cod sursa (job #1432761) | Cod sursa (job #2063008) | Cod sursa (job #866545) | Cod sursa (job #156472)
Cod sursa(job #156472)
#include <stdio.h>
#include <string.h>
#define NMAX 100002
char Exp[NMAX];
long evalExp(int l, int r) {
if (Exp[l] == '(' && Exp[r] == ')')
return evalExp(l + 1, r - 1);
int nPar = 0, iDiv = -1, i;
for (i = r; i >= l; -- i) {
if (Exp[i] == ')') {
++ nPar;
continue;
}
if (Exp[i] == '(') {
-- nPar;
continue;
}
if (nPar == 0) {
if (Exp[i] == '+')
return evalExp(l, i - 1) + evalExp(i + 1, r);
if (Exp[i] == '-')
return evalExp(l, i - 1) - evalExp(i + 1, r);
if (Exp[i] == '*' || Exp[i] == '/')
iDiv = i;
}
}
if (iDiv != -1)
if (Exp[iDiv] == '*')
return evalExp(l, iDiv - 1) * evalExp(iDiv + 1, r);
else
return evalExp(l, iDiv - 1) / evalExp(iDiv + 1, r);
long x;
sscanf(Exp + l, "%ld", &x);
return x;
}
int main() {
freopen("evaluare.in", "r", stdin);
freopen("evaluare.out", "w", stdout);
scanf("%s", Exp);
long ans = evalExp(0, strlen(Exp) - 1);
printf("%ld\n", ans);
return 0;
}