Pagini recente » Cod sursa (job #1658680) | Cod sursa (job #1336275) | Cod sursa (job #930170) | Cod sursa (job #162882) | Cod sursa (job #1475428)
#include <cstdio>
#include <string>
using namespace std;
const int NMAX = 100505;
char A[NMAX];
/* expr -> expr (+ | -) term | term
* term -> term (* | /) factor | factor
* factor -> ([0-9]*) | ( expr )
*/
int parseExpr(char*&);
int parseTerm(char*&);
int parseFactor(char*&);
inline int parseExpr(char*& A) {
int res = parseTerm(A);
while (*A == '+' || *A == '-') {
res = (*A == '+') ? res + parseFactor(++A) : res - parseFactor(++A);
}
return res;
}
inline int parseTerm(char*& A) {
int res = parseFactor(A);
while (*A == '*' || *A == '/') {
res = (*A == '*') ? res * parseFactor(++A) : res / parseFactor(++A);
}
return res;
}
inline int parseFactor(char*& A) {
if (isdigit(*A)) {
int no = 0;
while (isdigit(*A)) {
no = no * 10 + *A - '0';
A++;
}
return no;
}
// parse (
int res = parseExpr(++A);
// parse )
A++;
return res;
}
int main() {
freopen("evaluare.in", "r", stdin);
freopen("evaluare.out", "w", stdout);
fgets(A + 1, NMAX, stdin);
char* B = A + 1;
printf("%d\n", parseExpr(B));
return 0;
}