Cod sursa(job #1193428)

Utilizator AlexNiuclaeNiculae Alexandru Vlad AlexNiuclae Data 31 mai 2014 18:49:54
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <cstdio>
#define Nmax 100010

using namespace std;

char s[Nmax],*p;


int termen();
int factor();
int nr();

int eval()
{
    int r=termen();
    while (*p=='+' || *p=='-')
        if (*p=='+') ++p, r+=termen();
        else ++p, r-=termen();

    return r;
}

int termen()
{
    int r=factor();
    while (*p=='*' || *p=='/')
        if (*p=='*') ++p, r*=factor();
        else ++p, r/=factor();

    return r;
}

int factor()
{
    int r;
    if (*p=='(') ++p, r=eval(), ++p;
    else r=nr();

    return r;
}

int nr()
{
    int r=0;
    while('0'<=*p && *p<='9')
    {
        r*=10;
        r+=(int)*p-'0';
        ++p;
    }

    return r;
}

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

    gets(s+1);
    p=s+1;
    printf("%d\n", eval());


    return 0;
}