Cod sursa(job #1379881)

Utilizator AlexandruValeanuAlexandru Valeanu AlexandruValeanu Data 6 martie 2015 20:00:44
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <bits/stdc++.h>

using namespace std;

const int Lmax = 100000 + 1;

char str[Lmax];
char *p;

const int H_MAX = 2;
const char op[H_MAX][4] = { "+-", "*/" };

int solve(int);

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

        default: return 0;
    }

    assert(1 == 0);
}

int termen()
{
    int t = 0;

    if (*p == '(')
    {
        p++;
        t = solve(0);
        p++;
    }
    else
    {
        while ( isdigit(*p) )
        {
            t = (t << 3) + (t << 1) + *p - '0';
            p++;
        }
    }

    return t;
}

int solve(int H)
{
    int t = 0;

    if (H == H_MAX)
        t = termen();
    else
        t = solve(H + 1);

    while ( strchr(op[H], *p) )
        t = eval(t, solve(H + 1), *p++);

    return t;
}

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

    fgets(str, Lmax, stdin);
    p = str;

    printf("%d\n", solve(0));

    return 0;
}