Cod sursa(job #3358553)

Utilizator ana.veronica13Ana Veronica Draghici ana.veronica13 Data 17 iunie 2026 19:37:51
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.79 kb
#include <fstream>
#include <string>
#include <map>
#include <stack>

using namespace std;

const int PRNT = 1e9 + 1;
const int INM = 1e9 + 2;
const int MNS = 1e9 + 3;
const int DV = 1e9 + 4;

int st[100005];

int main(){
  ifstream cin( "evaluare.in" );
  ofstream cout("evaluare.out" );
  int i, l, nr;
  string s;
  cin >> s;
  i = 0;
  l = 0;
  while( i < s.size() ){
    if( s[i] == '(' ){
      st[++l] = PRNT;
    }
    else if( s[i] == '*' )
      st[++l] = INM;
    else if( s[i] == '-' )
      st[++l] = MNS;
    else if( s[i] == '/' ){
      st[++l] = DV;
    }
    else if( isdigit(s[i]) ){
      nr = 0;
      while( i < s.size() && isdigit(s[i]) ){
        nr = nr * 10 + s[i] - '0';
        i++;
      }
      i--;
      if( l == 0 ){
        st[++l] = nr;
      }
      else if( st[l] <= 1e9 ){
        st[++l] = nr;
      }
      else if( st[l] == PRNT ){
        st[++l] = nr;
      }
      else if( st[l] == INM ){
        l--;
        st[l] *= nr;
      }
      else if( st[l] == DV ){
        l--;
        st[l] /= nr;
      }
      else if( st[l] == MNS ){
        st[l] = -nr;
      }
    }
    else if( s[i] == ')' ){
      nr = 0;
      while( l > 0 && st[l] != PRNT ){
        nr = nr + st[l];
        l--;
      }
      l--;
      if( l == 0 ){
        st[++l] = nr;
      }
      else if( st[l] <= 1e9 ){
        st[++l] = nr;
      }
      else if( st[l] == PRNT ){
        st[++l] = nr;
      }
      else if( st[l] == INM ){
        l--;
        st[l] *= nr;
      }
      else if( st[l] == DV ){
        l--;
        st[l] /= nr;
      }
      else if( st[l] == MNS ){
        st[l] = -nr;
      }
    }
    i++;
  }
  nr = 0;
  for( i = 1; i <= l; i++ ){
    nr += st[i];
  }
  cout << nr;
  return 0;
}