Cod sursa(job #1475428)

Utilizator salam1Florin Salam salam1 Data 24 august 2015 06:48:18
Problema Evaluarea unei expresii Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#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;
}