Cod sursa(job #1188443)

Utilizator cruelifanLouis Cypher cruelifan Data 19 mai 2014 18:11:50
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>

using namespace std;

const int knmax = 1e5 + 5;
char *p, given_expr[knmax];

int term();
int factor();
int number();

int term(){
  int t = factor();
  while(*p == '+' || *p == '-'){
    if(*p == '-'){
      ++p;
      t -= factor();
    }
    else{
      ++p;
      t += factor();
    }
  }
  return t;
}

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

int number(){
  int t = 0;
  while(*p <= '9' && *p >= '0'){
    t = t * 10 + *p - '0';
    ++p;
  }
  if(*p == '('){
     ++p;
     t = term();
     ++p;
  }
  return t;
}

int main(){
  freopen("evaluare.in", "r", stdin);
  freopen("evaluare.out", "w", stdout);

  gets(given_expr);
  p = given_expr;

  printf("%d\n", term());

  return 0;
}