Cod sursa(job #760478)

Utilizator Theorytheo .c Theory Data 21 iunie 2012 16:48:39
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <cstdio>
#include <cstring>

char s[100009];
char *p = s;
const long hmax = 2;
char op[4][4]={"+-","*/","^",""};

long operatie(long x, long y, char c) {
	switch ( c ) {
		case '+': return x+y;
		case '-': return x-y;
		case '*': return x*y;
		case '/': return x/y;
	}
	return 0;
}

long eval(long);
long eval(long );
long pr()
{
    long r = 0;
    if( *p == '(')
       {
         ++p;  r = eval(0); ++p;
       }
    else
    {
        while(strchr ("0123456789", *p))
            r = r * 10 + *(++p - 1) -'0';
    }
    return r;
}
long eval(long h)
{
    long r = (h == hmax) ? pr() : eval(h + 1);
    while(strchr(op[h],*p))
        r = operatie( r , eval(h + 1), *(++p - 1));
    return r;
}
int main()
{
   fgets(s, 100010, fopen("evaluare.in", "r"));
	fprintf(fopen("evaluare.out", "w"), "%ld\n", eval(0));

    return 0;

}