Cod sursa(job #1418820)

Utilizator andreiagAndrei Galusca andreiag Data 14 aprilie 2015 04:44:01
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <cctype>

using namespace std;
typedef unsigned int ui;

int eval(const string &A, ui &pos);
int termen(const string &A, ui &pos);

int factor(const string &A, ui &pos) {
  if (A[pos] == '(') {
    ++pos;
    int r = eval(A, pos);
    ++pos;
    return r;
  } else {
    int r = 0;
    while(pos < A.size() && isdigit(A[pos])) {
      r = r*10 + A[pos] - '0';
      ++pos;
    }
    return r;
  }
}

int eval(const string &A, ui &pos) {
  int r = termen(A, pos);
  while (pos < A.size() && (A[pos] == '+' || A[pos] == '-')) {
    switch (A[pos]) {
      case '+': ++pos; r += termen(A, pos); break;
      case '-': ++pos; r -= termen(A, pos); break;
    }
  }
  return r;
}

int termen(const string &A, ui &pos) {
  int r = factor(A, pos);
  while (pos < A.size() && (A[pos] == '*' || A[pos] == '/')) {
    switch (A[pos]) {
      case '*': ++pos; r *= factor(A, pos); break;
      case '/': ++pos; r /= factor(A, pos); break;
    }
  }
  return r;
}


int main()
{
  ifstream f ("evaluare.in");
  ofstream g ("evaluare.out");
  
  string A;
  f >> A;
  
  ui pos = 0;
  int ans = eval(A, pos);
  g << ans << '\n';

  return 0;
}