Pagini recente » Cod sursa (job #1415247) | Cod sursa (job #1060971) | Cod sursa (job #462943) | Cod sursa (job #1379851) | Cod sursa (job #509447)
Cod sursa(job #509447)
#include <stdio.h>
#include <stdlib.h>
char s[100001];
int p = 0;
int expresie();
int factor() { // Un factor este un numar sau o expresie intre paranteze.
int r;
if(s[p] == '(') {
p++;
r = expresie();
p++;
}
else
for (r = 0; '0' <= s[p] and s[p] <= '9'; p++)
r = 10 * r + s[p] - '0';
return r;
}
int termen() { // Un termen este un factor sau un produs de factori.
int r = factor();
while (s[p] == '*' || s[p] == '/')
if (s[p] == '*') {
p++; r *= factor();
}
else {
p++; r /= factor();
}
return r;
}
int expresie() { // O expresie este un numar sau un termen al unei sume.
int r = termen();
while (s[p] == '+' or s[p] == '-')
if(s[p] == '+') {
p++; r += termen();
}
else {
p++; r -= termen();
}
return r;
}
int main() {
freopen ("evaluare.in", "r", stdin);
freopen ("evaluare.out", "w", stdout);
scanf ("%s", &s);
printf ("%d", expresie());
}