Cod sursa(job #1550690)

Utilizator juniorOvidiu Rosca junior Data 14 decembrie 2015 15:40:55
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
// http://www.infoarena.ro/problema/evaluare
#include <fstream>

using namespace std;

string s;
int p = 0;

int expresie();

int factor() { // Un factor este un numar sau o expresie intre paranteze.
  int r;

  if(s[p] == '(') {
    p++; // Trecem in dreapta parantezei deschise.
    r = expresie();
    p++; // Trecem in dreapta parantezei inchise.
  }
  else // Determinam valoarea numarului.
    for (r = 0; '0' <= s[p] and s[p] <= '9'; p++)
      r = 10 * r + s[p] - '0';
  return r;
}

int termen() { // Un termen este un factor sau un produs de factori.
  int r = factor();

  while (s[p] == '*' or s[p] == '/')
    if (s[p] == '*') {
      p++; r *= factor();
    }
    else {
      p++; r /= factor();
    }
  return r;
}

int expresie() { // O expresie este un termen sau o suma de termeni.
  int r = termen();

  while (s[p] == '+' or s[p] == '-')
    if(s[p] == '+') {
      p++; r += termen();
    }
    else {
      p++; r -= termen();
    }
  return r;
}

int main() {
  ifstream fi("evaluare.in");
  ofstream fo("evaluare.out");
  fi >> s;
  fo << expresie();
}