Cod sursa(job #377653)

Utilizator yobunSasaujan Marian yobun Data 25 decembrie 2009 18:48:01
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 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;

}