Cod sursa(job #988047)

Utilizator FlameingoAiordachioaei Marius Flameingo Data 21 august 2013 21:27:47
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.37 kb
#include <cstdio>
#include <cstring>
using namespace std;

const int NMAX = 100003;

char S[NMAX], *p = S + 1;

int sum_diference ();
int multiplicaiton_division ();
int sub_expression ();

int main () {

    freopen ("evaluare.in", "r", stdin);
    freopen ("evaluare.out", "w", stdout);
    scanf ("%s", p);
    printf ("%d", sum_diference ());

}

int sum_diference () {

    int value = multiplicaiton_division (), _value;
    while (*p == '+' || *p == '-')
        if (*p == '+') {
            ++p;
            _value = multiplicaiton_division ();
            value += _value;
        }
        else
            ++p,
            _value = multiplicaiton_division (),
            value -= _value;
    return value;

}

int multiplicaiton_division () {

    int value = sub_expression (), _value;
    while (*p == '*' || *p == '/')
        if (*p == '*')
            ++p,
            _value = sub_expression (),
            value *= _value;
        else
            ++p,
            _value = sub_expression (),
            value /= _value;
    return value;

}

int sub_expression () {

    int value = 0;
    if (*p == '(') {
        ++p;
        value = sum_diference ();
        ++p;
        return value;
    }
    while ('0' <= *p && *p <= '9')
        value *= 10,
        value += *p - '0',
        ++p;
    return value;

}