Cod sursa(job #1718787)

Utilizator radu.bRadu Brumariu radu.b Data 19 iunie 2016 07:32:33
Problema Evaluarea unei expresii Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.93 kb
#include<stdio.h>
#define MAXLEN 100000

char line[MAXLEN];
char *p;

long termen();
long factor();
long eval();

long eval() {
  long r = termen();
  while(*p == '+' || *p == '-') {
    switch(*p){
    case '+':
      ++p;
      r += termen();
      break;
    case '-':
      ++p;
      r -= termen();
      break;
    }
  }
  return r;
}

long termen() {
  long r = factor();
  while(*p == '*' || *p == '/') {
    switch(*p) {
    case '*':
      ++p;
      r *= factor();
      break;
    case '/':
      ++p;
      r /= factor();
      break;
    }
  }
  return r;
}

long factor() {
  long r = 0;
  if( *p == '(') {
    ++p;
    r = eval();
    ++p;
  } else {
    while(*p >= '0' && *p <= '9') {
      r = r*10 + *p - '0';
      p++;
    }
  }
  return r;
}

int main() {
  freopen("evaluare.in", "r", stdin);
  freopen("evaluare.out", "w+", stdout);
  fgets(line, MAXLEN, stdin);
  p = line;
  fprintf(stdout, "%ld", eval());
  return 0;
}