Cod sursa(job #793580)

Utilizator tsubyRazvan Idomir tsuby Data 3 octombrie 2012 16:11:06
Problema Evaluarea unei expresii Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <cstdio>

#define MAX 100010

char s[MAX], *p=s;

int termen();
int factor();

int eval()
{
    int r = termen();
    while ( *p=='+' || *p=='-' )
    {
        switch ( *p )
        {
            case '+':
                ++p;
                r += termen();
                break;
            case '-':
                ++p;
                r -= termen();
                break;
        }
    }
    return r;
}

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

int factor()
{
    long r=0;
    if ( *p == '(' )
    {
        ++p;
    }
    else
    {
        while ( *p>='0' && *p<='9' )
        {
            r = r*10 + *p - '0';
            ++p;
       }
    }
    return r;
}
int main()
{
    freopen("evaluare.in","r",stdin);
    freopen("evaluare.out","w",stdout);
    gets(s);
    printf("%d\n", eval());
    return 0;
}