Cod sursa(job #3030747)

Utilizator Asgari_ArminArmin Asgari Asgari_Armin Data 17 martie 2023 20:47:06
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <bits/stdc++.h>

using namespace std;

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

string s;
int p;

int expresie();
int termen();
int factor();

int expresie() {
  int nr = termen();
  while (s[p] == '+' || s[p] == '-') {
    if (s[p] == '+') {
      ++p;
      nr += termen();
    }
    else {
      ++p;
      nr -= termen();
    }
  }
  return nr;
}

int termen() {
  int nr = factor();
  while (s[p] == '*' || s[p] == '/') {
    if (s[p] == '*') {
      ++p;
      nr *= factor();
    }
    else {
      ++p;
      nr /= factor();
    }
  }
  return nr;
}

int factor() {
  if (s[p] == '(') {
    ++p;
    int nr = expresie();
    ++p;

    return nr;
  }
  else {
    int semn = 1;
    while (s[p] == '-') {
      semn = -semn;
      ++p;
    }

    int nr = 0;
    while (isdigit(s[p])) {
      nr = nr * 10 + (s[p] - '0');
      ++p;
    }
    return nr * semn;
  }
}

int main() {
  fin >> s;
  fout << expresie();
  return 0;
}