Cod sursa(job #2344012)

Utilizator Robert_VRVRobert Vadastreanu Robert_VRV Data 14 februarie 2019 17:35:31
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>
#include <string.h>

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

const int MAX_N = 100000;
char op[3][4] = {"+-", "*/", ""};

char s[5 + MAX_N];
char *p = s;

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

int vals = 0;

int solve(int lev) {
  int x, y;
  if (lev == 2) {
    if (*p == '(') {
      ++p;
      x = solve(0);
      ++p;
    } else {
      for (x = 0; '0' <= *p && *p <= '9'; ++p)
        x = x * 10 + (*p) - '0';
    }
  } else {
    for (x = solve(lev + 1); *p != '\0' && strchr(op[lev], *p); x = y) {
      y = eval(x, solve(lev + 1), *p++);
    }
  }
  return x;
}

int main() {

  fin.get(s, MAX_N, '\n');
  fout << solve(0) << '\n';

  fclose(stdin);
  fclose(stdout);

  return 0;
}