Pagini recente » Cod sursa (job #254486) | Cod sursa (job #2730240) | Cod sursa (job #610590) | Cod sursa (job #576120) | Cod sursa (job #985711)
Cod sursa(job #985711)
#include<stdio.h>
#include<string.h>
char str[100000];
int n, i;
// E=T+E'|T-E'|T
// E'=E'+|T
int expression() {
int e = term();
while(i < n && (str[i] == '-' || str[i] == '+')) {
switch(str[i]) {
case '+': i++;
e += term();
break;
case '-': i++;
e -= term();
break;
}
}
return e;
}
// T=F+T'|F-T'|F
// T'=T'+|F
int term() {
int t = factor();
while(i < n && (str[i] == '*' || str[i] == '/')) {
switch(str[i]) {
case '*': i++;
t *= factor();
break;
case '/': i++;
t /= factor();
break;
}
}
return t;
}
// F = (E) | nr
int factor() {
if (str[i] == '(') {
i++;
int f = expression();
i++;
return f;
}
int nr = 0;
while(i < n && (str[i] >= '0' && str[i] <= '9')) {
nr *= 10;
nr += str[i] - '0';
i++;
}
return nr;
}
int main() {
freopen("evaluare.in", "r", stdin);
freopen("evaluare.out", "w", stdout);
scanf("%s", str);
n = strlen(str);
i = 0;
printf("%d\n", expression());
return 0;
}