Cod sursa(job #2790425)

Utilizator TghicaGhica Tudor Tghica Data 28 octombrie 2021 22:42:46
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <fstream>
#include <string>///scz ca fac cu recursivitate, dar am incercat o solutie cu stackuri si cu nivele de importanta si nu mi-a iesit implementarea si nu prea mai am chef...

#define NMAX 100000

using namespace std;

string s;
int poz = -1;

int evalSol();

int getNumber() {
  int x = 0;

  if( s[poz] == '(' ) {
    x = evalSol();
    poz++;
  } else {
    while( '0' <= s[poz] && s[poz] <= '9' ) {
      x = x * 10 + s[poz] - '0';
      poz++;
    }
  }

  return x;
}

int imultire() {
  int rez = getNumber(), x;
  char semn;

  while( s[poz] == '/' || s[poz] == '*' ) {
    semn = s[poz];
    poz++;
    x = getNumber();
    if( semn == '/' )
      rez /= x;
    else
      rez *= x;
  }

  return rez;
}

int evalSol() {
  poz++;
  int rez = imultire(), x;
  char semn;

  while( s[poz] == '-' || s[poz] == '+' ) {
    semn = s[poz];
    poz++;
    x = imultire();
    if( semn == '-' )
      rez -= x;
    else
      rez += x;
  }

  return rez;
}

int main() {
  ifstream cin("evaluare.in");
  ofstream cout("evaluare.out");
  cin>>s;
  cout<<evalSol();
  return 0;
}