Cod sursa(job #2217298)

Utilizator andrei.arnautuAndi Arnautu andrei.arnautu Data 29 iunie 2018 22:03:58
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
/**
  *  Worg
  */
#include <cstdio>

FILE *fin = freopen("evaluare.in", "r", stdin); FILE *fout = freopen("evaluare.out", "w", stdout);

const int MAX_LENGTH = 1e5 + 5;

/*-------- Data --------*/
char s[MAX_LENGTH];
char *cursor;
/*-------- --------*/

int EvalA();
int EvalB();
int EvalC();

int EvalA() {
  int ret = EvalB();

  while(*cursor == '+' || *cursor == '-') {
    char sign = *cursor;
    cursor++;  //  Go over the sign

    if(sign == '+') {
      ret += EvalB();
    } else {
      ret -= EvalB();
    }
  }

  return ret;
}

int EvalB() {
  int ret = EvalC();

  while(*cursor == '*' || *cursor == '/') {
    char sign = *cursor;
    cursor++;  //  Go over the sign

    if(sign == '*') {
      ret *= EvalC();
    } else {
      ret /= EvalC();
    }
  }

  return ret;
}

int EvalC() {
  if(*cursor == '(') {
    cursor++; int ret = EvalA(); cursor++;
    return ret;
  } else {
    int ret = 0;
    while('0' <= *cursor && *cursor <= '9') {
      ret = ret * 10 + *cursor - '0';
      cursor++;
    }
    return ret;
  }
}

int main() {
  scanf("%s", s); cursor = s;

  printf("%d\n", EvalA());
  return 0;
}