Cod sursa(job #525613)

Utilizator DraStiKDragos Oprica DraStiK Data 25 ianuarie 2011 16:57:10
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <algorithm>
using namespace std;

#define DIM 100005

char buff[DIM];
int poz=1;

int eval ();
int termen ();
int factor ();

int eval ()
{
    int r;

    for (r=termen (); buff[poz]=='+' || buff[poz]=='-'; )
        if (buff[poz]=='+')
        {
            ++poz;
            r+=termen ();
        }
        else
        {
            ++poz;
            r-=termen ();
        }

    return r;
}

int termen ()
{
    int r;

    for (r=factor (); buff[poz]=='*' || buff[poz]=='/'; )
        if (buff[poz]=='*')
        {
            ++poz;
            r*=factor ();
        }
        else
        {
            ++poz;
            r/=factor ();
        }

    return r;
}

int factor ()
{
    int r;

    if (buff[poz]=='(')
    {
        ++poz;
        r=eval ();
        ++poz;
    }
    else
        for (r=0; buff[poz]>='0' && buff[poz]<='9'; ++poz)
            r=r*10+buff[poz]-'0';

    return r;
}

int main ()
{
    freopen ("evaluare.in","r",stdin);
    freopen ("evaluare.out","w",stdout);

    fgets (buff+1,DIM,stdin);
    printf ("%d",eval ());

    return 0;
}