Cod sursa(job #1106639)

Utilizator danny794Dan Danaila danny794 Data 12 februarie 2014 22:57:12
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <cstdio>

const int NMAX = 100005;
char expr[NMAX], *pointer;

int prod_div();
int term();

int eval() {
  int r = prod_div();
  while( *pointer == '+' || *pointer == '-' ) {
    if( *pointer == '+' ) {
      pointer++;
      r += prod_div();
    } else {
      pointer++;
      r -= prod_div();
    }
  }
  return r;
}

int prod_div() {
  int r = term();
  while( *pointer == '*' || *pointer == '/' ) {
    if( *pointer == '*' ) {
      pointer++;
      r *= term();
    } else {
      pointer++;
      r /= term();
    }
  }
  return r;
}

int term() {
  int r = 0;
  if ( *pointer == '(' ) {
    pointer++;
    r = eval();
    pointer++;
  } else while( *pointer >= '0' && *pointer <= '9' ) {
    r = r * 10 + (*pointer - '0');
    pointer++;
  }
  return r;
}

int main() {
  freopen("evaluare.in", "r", stdin);
  freopen("evaluare.out", "w", stdout);
  scanf("%s", expr);
  pointer = expr;
  printf("%d", eval());
  return 0;
}