Cod sursa(job #2799342)

Utilizator Asgari_ArminArmin Asgari Asgari_Armin Data 12 noiembrie 2021 22:06:38
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <bits/stdc++.h>

using namespace std;

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

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

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

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

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

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

int main() {
  fin >> (1 + s);
  p = 1;
  fout << expresie();
  return 0;
}