Cod sursa(job #332860)

Utilizator levap1506Gutu Pavel levap1506 Data 20 iulie 2009 19:55:59
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
#include <string>
using namespace std;
string a;
int i;
long eval();
long factor() {
    if (a[i]=='(')
    {
        i++;
        return eval();
    }
    long r=0;
    while (a[i]>='0'&&a[i]<='9')
    {
        r=r*10+(a[i]-'0');
        i++;
    }
    return r;
}
long termen() {
  long r=factor();
  while (a[i]=='*'||a[i]=='/')
  switch (a[i])
  {
      case '*':
       {
           i++;
           r*=factor();
        }
      break;
      case '/':
       {
           i++;
           r/=factor();
        }
      break;
  }
  return r;
}
long eval() {
  long r = termen();
  while (a[i]=='+'||a[i]=='-')
  switch (a[i])
  {
      case '+': {i++; r+=termen(); }
      break;
      case '-': { i++; r-=termen(); }
      break;
  }
  if (a[i]==')') i++;
  return r;
}
int main () {
    ifstream in;
    ofstream out;
    in.open("evaluare.in");
    out.open("evaluare.out");
    in >> a;
    in.close();
    long r = eval();
    out << r;
    out.close();
    return 0;
}