Cod sursa(job #2187348)

Utilizator NeredesinI am not real Neredesin Data 26 martie 2018 13:48:51
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>
#include <cstring>

using namespace std;

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

const int LENMAX = 1e5 + 1e2;

int n;
char s[LENMAX], *p;

int eval();
int termen();
int factor();

int eval() {
  int res = termen();
  while(*p == '+' || *p == '-') {
    if(*p == '+') {
      p++;
      res += termen();
    } else {
      p++;
      res -= termen();
    }
  }
  return res;
}

int termen() {
  int res;
  res = factor();
  while(*p == '*' || *p == '/') {
    if(*p == '*') {
      p++;
      res *= factor();
    } else {
      p++;
      res /= factor();
    }
  }
  return res;
}

int factor()
{
  int res = 0;
  if(*p == '(') {
    p++;
    res = eval();
    p++;
  } else {
    while(isdigit(*p)) {
      res = res * 10 + (*p - '0');
      p++;
    }
  }
  return res;
}

int main()
{
  in.get(s,100010);
  p = s;
  n = eval();
  out << n <<'\n';

  in.close();
  out.close();
  return 0;
}