Cod sursa(job #859038)

Utilizator AlexandruValeanuAlexandru Valeanu AlexandruValeanu Data 19 ianuarie 2013 17:18:05
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

#define Nmax 100002

char e[Nmax], *p;

void citire();
inline int Expresie();
inline int Factor();
inline int Termen();
void afis();

int main()
{
    citire();
    afis();

    return 0;
}

void citire(){

    freopen("expresie.in", "r", stdin);

    scanf("%s", e);

    p = e;
}

void afis(){

    freopen("expresie.out", "w", stdout);

    printf("%d\n", Expresie());
}

inline int Factor(){

    int t = 0;

    if(*p == '(')
        ++p,
        t = Expresie(),
        ++p;
    else
        for(; *p >= 48 && *p <= 58; ++p)
            t = t * 10 + *p - 48;

    return t;
}

inline int Termen(){

    int t = Factor();

    while(1){

        if(*p == '*')
            ++p,
            t *= Factor();
        else
            if(*p == '/')
                ++p,
                t /= Factor();
            else
                break;
    }

    return t;
}

inline int Expresie(){

    int t = Termen();

    while(1){

        if(*p == '+')
            ++p,
            t += Termen();
        else
            if(*p == '-')
                ++p,
                t -= Termen();
            else
                break;
    }

    return t;
}