Cod sursa(job #446263)

Utilizator SpiderManSimoiu Robert SpiderMan Data 25 aprilie 2010 15:44:29
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <cstdio>

#define MAX  100010
#define IN   "evaluare.in"
#define OUT  "evaluare.out"

char S[MAX], *p = S;

int subexp();
int fact();
int solve();


int main()
{
    freopen(IN,"r",stdin);
    freopen(OUT,"w",stdout);

    fgets(S, MAX, stdin);
    printf("%d",solve());

    return 0;
}

int solve()
{
    int r = subexp();

    while ( *p == '+' || *p == '-' )
        if ( *p == '+' )
            p++, r += subexp();
        else if ( *p == '-' )
            p++, r -= subexp();
    return r;
}
int subexp()
{
    int r = fact();

    while ( *p == '*' || *p == '/' )
        if ( *p == '*' )
            p++, r *= fact();
        else if ( *p == '/' )
            p++, r /= fact();

    return r;
}

int fact()
{
    int r = 0;
    if ( *p == '(' )
        p++, r = solve(), p++;
    else
        while ( *p >= '0' && *p <= '9' )
            r = r * 10 + *p++ - '0';

    return r;
}