Cod sursa(job #155406)

Utilizator sandyxpSanduleac Dan sandyxp Data 11 martie 2008 21:52:56
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include <stdio.h>
#include <string.h>

#define FIN "evaluare.in"
#define FOUT "evaluare.out"
#define MAXN 100001

char A[MAXN];
static const char *oper[] = { "+-", "*/", "" };

class expresie {
    private:
        char A[MAXN];
        int pos;

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

        int item() {
            int a = 0;
            if (A[pos] == '(') {
                ++pos, a=expr(0), ++pos;
            } else {
                while ( (unsigned) (A[pos] - '0') < 10 )
                    a = 10*a + A[pos++] - '0';
            }
            return a;
        }

        int expr(int nv) {
            if (nv >= 2)
                return item();
            int a = expr(nv+1);
            while ( strchr(oper[nv], A[pos]) )
                a = result(a, expr(nv+1), A[pos++]);
            return a;
        }

    public:
        expresie(char str[]) {
            strcpy(A, str);
        }

        int solve() {
            pos = 0;
            return expr(0);
        }
};

int main()
{
    fgets(A, MAXN, fopen(FIN, "r"));
    expresie E(A);
    fprintf(fopen(FOUT, "w"), "%d\n", E.solve());
}