Cod sursa(job #527394)

Utilizator giuliastefGiulia Stef giuliastef Data 31 ianuarie 2011 13:41:43
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <iostream>
#include <fstream>
#include <math.h>
#define LMAX 100010
using namespace std;
int i;
char e[LMAX];
long termen();
long factor();
long eval()
{
     long r=termen();
     while(e[i]=='+'||e[i]=='-')
     {
      switch(e[i])
      {
       case '+':
            i++;
            r=r+termen();
            break;
       case '-':
            i++;
            r=r-termen();
            break;
      }
     }
     return r;
}
long termen()
{
     long r=factor();
     while(e[i]=='*'||e[i]=='/')
     {
      switch(e[i])
      {
       case '*':
            i++;
            r=r*factor();
            break;
       case '/':
            i++;
            r=r/factor();
            break;
      }
     }
     return r;
}
long factor()
{
     long r=0;
     if(e[i]=='(')
     {
      i++;
      r=eval();
      i++;
     }
     else
     {
      r=atol(&e[i]);
      if(r) i=i+log10(r)+1;
      else i++;
     }
     return r;
}
int main()
{
    ifstream f("evaluare.in");
    ofstream g("evaluare.out");
    f>>e;
    g<<eval()<<"\n";
    return 0;
}