Cod sursa(job #2254370)

Utilizator ApostolIlieDanielApostol Daniel ApostolIlieDaniel Data 5 octombrie 2018 10:44:06
Problema Evaluarea unei expresii Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <bits/stdc++.h>

using namespace std;

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

const int BUFFER = 1e5;

char s[BUFFER + 1];

int p; // pointer

int eval ();

int fact () {
  int semn, nr;
  semn = 1;
  nr = 0;
  if (s[p] == '-') {
    semn = -semn;
    p++;
  }
  if (s[p] == '(') {
    p++;
    nr = eval ();
    p++;
    return nr * semn;
  }
  else {
    while (isdigit (s[p])) {
      nr = nr * 10 + s[p] - '0';
      p++;
    }
    return nr * semn;
  }
}

int term () {
  int sum = fact ();
  while (s[p] == '/' || s[p] == '*') {
    if (s[p] == '/') {
      p++;
      sum = sum / term ();
    }
    else {
      p++;
      sum = sum * term ();
    }
  }
  return sum;
}

int eval () {
  int sum = term ();
  while (s[p] == '+' || s[p] == '-') {
    if (s[p] == '+') {
      p++;
      sum = sum + term ();
    }
    else {
      p++;
      sum = sum - term ();
    }
  }
  return sum;
}

int main() {
  fscanf (fin, "%s", &s);
  p = 0;
  fprintf (fout, "%d", eval ());
  return 0;
}