Cod sursa(job #1478810)

Utilizator ConsstantinTabacu Raul Consstantin Data 29 august 2015 16:45:24
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <cstdio>
#include <cstring>
#define IN_FILE_NAME "evaluare.in"
#define OUT_FILE_NAME "evaluare.out"
#define NMAX 100000
FILE *in, *out;
char E[NMAX];
int ptr;
int lenE;
void read() {
  fscanf(in, "%s", E);
  lenE = strlen(E);
}
int sum();
int res();
int term();

int term() {
  int res;
  if(E[ptr] == '(') {
    ptr ++;
    res = sum();
    ptr ++;
  } else {
    res = 0;
    while(E[ptr] >= '0' && E[ptr] <= '9') {
      res = res*10 + E[ptr] - '0';
      ptr++;
    }
  }
  return res;
}

int prod() {
  int res = term();
  while(ptr < lenE) {
    if (E[ptr] == '*') {
      ptr ++;
      res *= term();
    } else if (E[ptr] == '/') {
      ptr ++;
      res /= term();
    } else {
      return res;
    }
  }
  return res;
}

int sum() {
  int res = prod();
  while(ptr < lenE) {
    if (E[ptr] == '+') {
      ptr ++;
      res += prod();
    } else if (E[ptr] == '-') {
      ptr ++;
      res -= prod();
    } else {
      return res;
    }
  }
  return res;
}

int main() {
  in = fopen(IN_FILE_NAME, "r");
  out = fopen(OUT_FILE_NAME, "w");
  read();
  fprintf(out, "%d", sum());
  fclose(in);
  fclose(out);
  return 0;
}