Cod sursa(job #2884015)

Utilizator PetyAlexandru Peticaru Pety Data 2 aprilie 2022 11:03:32
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <bits/stdc++.h>
#define ll long long

using namespace std;

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

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


string s;
int p;

int eval();

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

int termen () {
  int sum = factor();
  while (p < s.size() && (s[p] == '*' || s[p] == '/')) {
    p++;
    if (s[p - 1] == '*')
      sum *= factor();
    else
      sum /= factor();
  }
  return sum;
}

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

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