Cod sursa(job #2373385)

Utilizator MichaelXcXCiuciulete Mihai MichaelXcX Data 7 martie 2019 13:18:31
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include    <cstdio>
#include    <cstring>

#define     LMAX 2
#define     CMAX 100009

using namespace std;

char op[4][4] = {"+-", "*/", "^", ""};

char c[CMAX], *p = c;

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

int expr(int lvl)
{
    int x, y;

    if(lvl == 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(lvl + 1); strchr(op[lvl], *p); x = y)
            y = eval(x, expr(lvl + 1), *p++);

    return x;
}

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