Cod sursa(job #2324832)

Utilizator lucametehauDart Monkey lucametehau Data 21 ianuarie 2019 16:35:59
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>

using namespace std;

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

int i;
string s;

string priority[4] = {"-+", "/*", "^", ""}; // aparent pot sa bag si ^

int op(int a, int b, char c) {
  if(c == '-')
    return a - b;
  if(c == '+')
    return a + b;
  if(c == '*')
    return a * b;
  return a / b;
}

bool f(string a, char c) {
  for(int j = 0; j < a.size(); j++) {
    if(a[j] == c)
      return 1;
  }
  return 0;
}

int eval(int p) {
  int nr, nr2;
  if(p == 2) {
    if(s[i] == '(')
      i++, nr = eval(0), i++;
    else {
      nr = 0;
      while('0' <= s[i] && s[i] <= '9' && i < s.size())
        nr = nr * 10 + s[i] - '0', i++;
    }
  } else {
    for(nr = eval(p + 1); f(priority[p], s[i]) && i < s.size(); nr = nr2)
      nr2 = op(nr, eval(p + 1), s[i++]);
  }
  return nr;
}

int main() {
  cin >> s;
  cout << eval(0);
  return 0;
}