Cod sursa(job #170052)

Utilizator tm_raduToma Radu tm_radu Data 2 aprilie 2008 12:53:07
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <stdio.h>
#define NM 100010

char s[NM], *p = s;

long int Termen();  
long int Factor();  
long int Eval();

int main() 
{
    freopen("evaluare.in", "r", stdin);
    freopen("evaluare.out", "w", stdout);
    scanf("%s", &s);
    printf("%ld\n", Eval());
    return 0;
}   
  
long int Eval()
{
    long int r = Termen();  
    while ( *p == '+' || *p == '-' ) 
    {
        switch ( *p ) 
        {
            case '+':  ++p; r += Termen(); break;  
            case '-':  ++p; r -= Termen(); break;  
        }  
    }  
    return r;  
}

long int Termen() 
{
    long int r = Factor();  
    while ( *p == '*' || *p == '/' ) 
    {
        switch ( *p ) 
        {
            case '*' :  ++p; r *= Factor(); break;
            case '/' :  ++p; r /= Factor(); break;
        }
    }
    return r;
}

long int Factor() 
{
    long int r = 0;    
    if ( *p == '(' ) 
        ++p, r = Eval(), ++p;
    else 
    {
        while ( *p >= '0' && *p <= '9' )
            r = r*10 + *p - '0',
            ++p;   
    }
    return r;  
}