Cod sursa(job #2620842)

Utilizator RaduQQTCucuta Radu RaduQQT Data 29 mai 2020 19:13:16
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#define _CRT_SECURE_NO_WARNINGS
#include <string.h>
#include <stdio.h>

#define LMAX 2 // nivelul maxim de prioritate
char op[4][4] = { "+-", "*/", "^", "" }; // operatorii pe niveluri de prioritate

#define NX 100010
char S[NX], * p = S;

int eval(int a, int b, char o) {
    switch (o) {
    case '+': return a + b;
    case '-': return a - b;
    case '*': return a * b;
    case '/': return a / b;
    }
}
int expr(int lev) {
    int x, y;

    if (lev == LMAX)
        if (*p == '(')
            ++p, x = expr(0), ++p;
        else
            for (x = 0; *p >= '0' && *p <= '9'; ++p)
                x = x * 10 + *p - '0';
    else
        for (x = expr(lev + 1); strchr(op[lev], *p); x = y)
            y = eval(x, expr(lev + 1), *p++);
    return x;
}

int main() {
    fgets(S, NX, fopen("evaluare.in", "r"));
    fprintf(fopen("evaluare.out", "w"), "%d\n", expr(0));
    return 0;
}