Cod sursa(job #2737787)

Utilizator StanSiBranBranSiStan StanSiBran Data 5 aprilie 2021 09:56:56
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <bits/stdc++.h>
#define ll long long
#define ld long double

using namespace std;

const ll MOD = 1e9 + 7;
const ll INF = 1e9;

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

string s;
int nr = 0;

int eval();

int factor() {
  int val = 0;
  if (s[nr] == '(') {
    nr++;
    val = eval();
    nr++;
  }
  else {
    while (nr < s.size() && s[nr] >= '0' && s[nr] <= '9') {
      val = val * 10 + s[nr] - '0';
      nr++;
    }
  }
  return val;
}

int termen () {
  int val = factor();
  while (nr < s.size() && (s[nr]== '*' || s[nr] == '/')) {
    if (s[nr] == '*')
      nr++, val *= factor();
    else 
      nr++, val /= factor();
  }
  return val;
}

int eval () {
  int val = termen();
  while (nr < s.size() && (s[nr] == '+' || s[nr] == '-')) {
    if (s[nr] == '+')
      nr++, val += termen();
    else 
      nr++, val -= termen();
  }
  return val;
}

int main()
{
  // ios_base::sync_with_stdio(false);
  // cin.tie(0); cout.tie(0);
  fin >> s;
  fout << eval();
  return 0;
}