Cod sursa(job #1877605)

Utilizator EuAlexOtaku Hikikomori EuAlex Data 13 februarie 2017 16:32:40
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.39 kb
#include <cstdio>

using namespace std;

char curchar;

void readnextchar() {
    curchar = getc(stdin);
}

int suma(int s = 0, char op = '+');
int prod(int p = 1, char op = '*');
int fact();
int intreg(int nr = 0);

int suma(int s, char op) {
    int produs = prod();
    int rez;
    if(op == '+') {
        rez = s + produs;
    } else {
        rez = s - produs;
    }
    if(curchar == '+' || curchar == '-') {
        op = curchar;
        readnextchar();
        rez = suma(rez, op);
    }
    return rez;
}

int prod(int p, char op) {
    int factor = fact();
    int rez;
    if(op == '*') {
        rez = p * factor;
    } else {
        rez = p / factor;
    }
    if(curchar == '*' || curchar == '/') {
        op = curchar;
        readnextchar();
        rez = prod(rez, op);
    }
    return rez;
}

int fact() {
    int factor;
    if(curchar == '(') {
        readnextchar();
        factor = suma();
        readnextchar();
    } else {
        factor = intreg();
    }
    return factor;
}

int intreg(int nr) {
    if(curchar >= '0' && curchar <= '9') {
        nr = nr * 10 + (curchar - '0');
        readnextchar();
        return intreg(nr);
    }
    return nr;
}

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

    readnextchar();
    printf("%d", suma());

    return 0;
}