Cod sursa(job #374049)

Utilizator alexandru92alexandru alexandru92 Data 15 decembrie 2009 20:36:08
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <cstring>
#include <fstream>
#include <cstdlib>
#define LEVELMAX 2
#define NMAX 2000001

/*
 *
 */
using namespace std;
ifstream in;
ofstream out;
const char op[4][4]={ "+-", "*/", "^", "" };
char e[NMAX], *expresion;
int evaluate( int a, char op, int b )
{
    switch( op )
    {
        case '+' : return a+b; break;
        case '*' : return a*b; break;
        case '/' : return a/b; break;
        case '-' : return a-b; break;
    }
}
int evaluate( unsigned int level )
{int x, y;
     if( LEVELMAX == level )
     
          if( '(' == *expresion )
          {
             ++expresion; //go over (
             x=evaluate(0); //evaluate the new expresion from in the ( )
             ++expresion; //go over )
          }
         else for( x=0; *expresion >= '0' && *expresion <= '9'; ++expresion ) //if we have a number
                 x=x*10+*expresion-'0';
     
     else for( x=evaluate(level+1); strchr( op[level], *expresion); x=y )
          {char oper=*expresion; ++expresion;
               y=evaluate( x, oper, evaluate(level+1) );
          }
     return x;
}
int main()
{
    in.open("evaluare.in");
    in>>e;
    unsigned int n=strlen(e);
    e[n]='-'; e[n+1]='0';
    expresion=e;
    out.open("evaluare.out");
    out<<evaluate(0);
    return 0;
}