Cod sursa(job #2736348)

Utilizator bogdanvladmihaiBogdan Vlad-Mihai bogdanvladmihai Data 3 aprilie 2021 13:13:13
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <bits/stdc++.h>

using namespace std;

#define debug(x) cerr << #x << " = " << x << "\n";

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

string s;

int p;

int fact();
int term();
int eval();

int fact() {
  int ret = 0, sign = 1;
  if (s[p] == '-') {
    p++;
    sign = -1;
  }
  if (s[p] == '(') {
    p++;
    ret = eval();
    p++;
  } else {
    while (s[p] >= '0' && s[p] <= '9') {
      ret = 10 * ret + s[p] - '0';
      p++;
    }
  }
  return ret * sign;
}

int term() {
  int ret = fact();
  while (s[p] == '*' || s[p] == '/') {
    if (s[p] == '*') {
      p++;
      ret *= fact();
    } else {
      p++;
      ret /= fact();
    }
  }
  return ret;
}

int eval() {
  int ret = term();
  while (s[p] == '+' || s[p] == '-') {
    if (s[p] == '+') {
      p++;
      ret += term();
    } else {
      p++;
      ret -= term();
    }
  }
  return ret;
}

int main() {
  in >> s;
  out << eval() << "\n";
  return 0;
}