Cod sursa(job #840075)

Utilizator paunmatei7FMI Paun Matei paunmatei7 Data 22 decembrie 2012 13:13:47
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include<stdio.h>
#include<string.h>
#define hmax 2
char s [ 100010 ] , * p = s , operand [ 4 ] [ 4 ] = { "+-" , "*/" , "^" , "" } ;
long element ( ) ;
long semn ( long x , long y , char tip )
{
    if ( tip == '+' )
        return x + y ;
    if ( tip == '-' )
        return x - y ;
    if ( tip == '*' )
        return x * y ;
    if ( tip == '/' )
        return x / y ;
    return 0;
}
long eval ( long h )
{
    long r = ( h == hmax ) ? element ( ) : eval ( h + 1 ) ;
    while ( strchr ( operand [ h ] , * p ) )
        r = semn ( r , eval ( h + 1 ) , * ( ++ p - 1 ) ) ;
    return r ;
}
long element ( )
{
    long r = 0 ;
    if ( * p == '(' )
        ++ p , r = eval ( 0 ) , ++ p ;
    else
        while ( strchr("0123456789", *p) )
            r = r*10 + *(++p-1) - '0';
    return r;
}
int main()
{
    freopen ( "evaluare.in" , "r" , stdin ) ;
    freopen ( "evaluare.out" , "w" , stdout ) ;
    gets ( s ) ;
    printf ( "%ld" , eval ( 0 ) ) ;
    return 0;
}