Cod sursa(job #1167192)

Utilizator mirceadinoMircea Popoveniuc mirceadino Data 4 aprilie 2014 16:11:22
Problema Evaluarea unei expresii Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include<cstdio>

using namespace std;

typedef long long int lld;
const int LMAX = 100000+5;

void Read(),Print();
lld Eval(),Term(),Fact(),Num();

char Expression[LMAX],*p;

int main()
{
    Read();
    Print();

    return 0;
}

void Read()
{
    freopen("evaluare.in","r",stdin);
    freopen("evaluare.out","w",stdout);

    scanf("%s",Expression);
}

void Print()
{
    p = Expression;

    printf("%lld\n",Eval());
}

lld Eval()
{
    lld r = Term();

    while(*p == '+' || *p == '-')
    {
        if(*p == '+') p++, r += Term();
        else if(*p == '-') p++, r -= Term();
    }

    return r;
}

lld Term()
{
    lld r = Fact();

    while(*p == '*' || *p == '/')
    {
        if(*p == '*') p++, r *= Term();
        else if(*p == '/') p++, r /= Term();
    }

    return r;
}

lld Fact()
{
    lld r;

    if(*p == '(') p++, r = Eval(), p++;
    else r = Num();

    return r;
}

lld Num()
{
    lld r = 0;

    while(*p >= '0' && *p <= '9')
        r = r*10 + *p-'0', p++;

    return r;
}