Cod sursa(job #2213759)

Utilizator dropsdrop source drops Data 17 iunie 2018 11:16:41
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <iostream>
#include <unordered_map>
#include <set>
#include <queue>
#include <memory>
#include <algorithm>
#include <map>
#include <stack>
#include <vector>
#include <string>
#include <cstring>
#include <functional>
using namespace std;

int eval(const string &s, int &i);

int term(const string &s, int &i) {
  int rez = 0;
  if (s[i] == '(') {
    ++i;
    rez = eval(s, i);
    ++i;
    return rez;
  }
  while ('0' <= s[i] && s[i] <= '9') {
    rez = rez * 10 + (s[i++] - '0');
  }
  return rez;
}

int factor(const string &s, int &i) {
  char op;
  int x = term(s, i), y;
  while ((op = s[i]) == '*' || (op = s[i]) == '/') {
    ++i;
    y = term(s, i);
    if (op == '*') x *= y; else x /= y;
  }
  return x;
}

int eval(const string &s, int &i) {
  char op;
  int x = factor(s, i), y;
  while ((op = s[i]) == '+' || (op = s[i]) == '-') {
    ++i; // pass operator
    y = factor(s, i);
    if (op == '+') x += y; else x -= y;
  }
  return x;
}

int eval(string &s) {
  s += '$';
  int i=0;
  return eval(s,i);
}

int main() {
  freopen("evaluare.in","r",stdin);
  freopen("evaluare.out","w",stdout);
  string s;
  cin >> s;
  cout << eval(s) << endl;
  return 0;
}