Cod sursa(job #1785258)

Utilizator algebristulFilip Berila algebristul Data 20 octombrie 2016 23:42:43
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <bits/stdc++.h>

using namespace std;

char S[100005];
char *p = S;

char L[3][3] = {
  "+-",
  "/*",
  ""
};

bool ok(int level, char op) {
  return strchr(L[level], op) != NULL;
}

int op(int x, int y, char op) {
  if (op == '+') return x + y;
  if (op == '-') return x - y;
  if (op == '/') return x / y;
  if (op == '*') return x * y;
  assert(false);
  return -1;
}

int eval(int lvl) {
  if (lvl == 2) {
    if (*p == '(') {
      p++;
      int x = eval(0);
      p++;
      return x;
    } else {
      int x = 0;
      while (*p >= '0' && *p <= '9') {
        x = x * 10 + (*p) - '0';
        p++;
      }
      return x;
    }
  } else {
    int x = eval(lvl + 1);
    while (*p && ok(lvl, *p)) {
      char k = *p;
      p++;
      x = op(x, eval(lvl + 1), k);
    }
    return x;
  }
}

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