Cod sursa(job #188964)

Utilizator Mishu91Andrei Misarca Mishu91 Data 11 mai 2008 00:21:21
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <cstdio>
#include <cctype>
#define MAX_N 100002

char A[MAX_N];
int k;

long eval(void);
long termen(void);
long factor(void);

int main()
{
    freopen("evaluare.in","rt",stdin);
    freopen("evaluare.out","wt",stdout);
    gets(A);
    printf("%ld\n",eval());
}

long eval()
{
    long r = termen();
    while(A[k] == '+' || A[k] == '-')
    {
        switch (A[k])
        {
            case '+':
                ++k;
                r += termen();
            break;

            case '-':
                ++k;
                r -= termen();
            break;
        }
    }
    return r;
}

long termen()
{
    long r = factor();
    while(A[k] == '*' || A[k] == '/')
    {
        switch (A[k])
        {
            case '*':
                ++k;
                r *= factor();
            break;

            case '/':
                ++k;
                r /= factor();
            break;
        }
    }
    return r;
}

long factor()
{
    long r = 0;
    if(A[k] == '(')
    {
        ++k;
        r = eval();
        ++k;
    }
    else
        while(isdigit(A[k]))
            r = r*10 + A[k++] - '0';
    return r;
}