Cod sursa(job #2739246)

Utilizator Asgari_ArminArmin Asgari Asgari_Armin Data 7 aprilie 2021 13:01:05
Problema Evaluarea unei expresii Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <bits/stdc++.h>

using namespace std;

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

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

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

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

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

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

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