Cod sursa(job #2703590)

Utilizator Asgari_ArminArmin Asgari Asgari_Armin Data 8 februarie 2021 19:48:30
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>

using namespace std;

ifstream fin( "evaluare.in" );
ofstream fout( "evaluare.out" );

const int NMAX = 1e5;
char s[NMAX + 1];
int p;

int expresie();
int termen();
int factor();

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

int termen() {
  int prod = factor();
  while( s[p] == '*' || s[p] == '/' ){
    if( s[p] == '*' ){
      ++p;
      prod *= factor();
    }
    else {
      ++p;
      prod /= factor();
    }
  }
  return prod;
}

int factor() {
  int semn, val;
  semn = 1;
  val = 0;
  while( s[p] == '-' ){
    ++p;
    semn -= semn;
  }
  if( s[p] == '(' ){
    ++p;
    val = expresie();
    ++p;
    return semn * val;
  }
  while( s[p] >= '0' && s[p] <= '9')
    val = val * 10 + (s[p++] - '0');
  return semn * val;
}

int main() {
  fin.getline(s, NMAX);
  fout << expresie();
  return 0;
}