Pagini recente » Istoria paginii runda/mda_plng/clasament | Monitorul de evaluare | Istoria paginii runda/brasov_13_jr/clasament | Istoria paginii utilizator/dumitrescugeorge | Cod sursa (job #156949)
Cod sursa(job #156949)
// expresia este formata din 3 categorii de componente
// 0. expresii/subexpresii - cele mai importante bloburi => blob0
// 1. blob0 = blob1 + blob1 + ... - blob1 sunt expresii intre care se fac adunari; ele sunt formate din produse
// 2. blob1 = blob2 * blob2 * ... - blob2 sunt expresii intre care se fac produse, ca atare ele pot fi doar numere sau alte expresii
// 3. blob2 = numar / (blob0)
#include <cstdio>
#include <cctype>
#define NMAX 100010
char Exp[NMAX], *Here = Exp;
long long blob1();
long long blob2();
long long blob0() { // blob1 + blob1 + ...
long long ans = blob1();
for (; *Here == '+' || *Here == '-'; )
if (*Here == '+') {
++ Here;
ans += blob1();
} else {
++ Here;
ans -= blob1();
}
return ans;
}
long long blob1() { // blob 0 * blob 0 * ...
long long ans = blob2();
for (; *Here == '*' || *Here == '/'; )
if (*Here == '*') {
++ Here;
ans *= blob2();
} else {
++ Here;
ans /= blob2();
}
return ans;
}
long long blob2() { // numar sau (blob0)
long long ans = 0;
if (*Here == '(') { // (blob0)
++ Here; // (
ans = blob0();
++ Here; // )
} else // numar
for (; isdigit(*Here); ++ Here)
ans = ans * 10 + *Here - '0';
return ans;
}
int main() {
freopen("evaluare.in", "r", stdin);
freopen("evaluare.out", "w", stdout);
scanf("%s", Exp);
printf("%lld\n", blob0());
return 0;
}