Cod sursa(job #3303441)

Utilizator filipdanieloanFilip-Daniel Oancea filipdanieloan Data 15 iulie 2025 16:19:00
Problema Evaluarea unei expresii Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <fstream>
#include <cstdint>
using namespace std;
typedef uint32_t u32;

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

string s;
u32 idx;

u32 eval();

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

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

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


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

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

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