Cod sursa(job #3303442)

Utilizator filipdanieloanFilip-Daniel Oancea filipdanieloan Data 15 iulie 2025 16:21:38
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
#include <cstdint>
using namespace std;
typedef int32_t i32;

constexpr char iname[] = "evaluare.in";
constexpr char oname[] = "evaluare.out";

string s;
i32 idx;

i32 eval();

i32 factor() {
  i32 rez = 0;
  if(s[idx] == '(') {
    ++idx;
    rez = eval();
    ++idx;
    return rez;
  }
  while(idx < static_cast<i32>(s.size()) && s[idx] >= '0' && s[idx] <= '9') {
    rez = rez*10 + (s[idx] - '0');
    ++idx;
  }
  return rez;
}

i32 termen() {
  i32 rez = factor();
  while(idx < s.size() && (s[idx] == '*' || s[idx] == '/')) {
    if(s[idx] == '*') {
      ++idx;
      rez *= factor();
    }
    else {
      ++idx;
      rez /= factor();
    }
  }
  return rez;
}

i32 eval() {
  i32 rez = termen();
  while(idx < s.size() && (s[idx] == '+' || s[idx] == '-')) {
    if(s[idx] == '+') {
      ++idx;
      rez += termen();
    } else {
      ++idx;
      rez -= termen();
    }
  }
  return rez;
}


i32 main() {
  ifstream in(iname);
  in >> s;

  ofstream out(oname);
  out << eval();

  in.close(), out.close();
  return 0;
}