Cod sursa(job #282806)

Utilizator victorsbVictor Rusu victorsb Data 18 martie 2009 12:27:43
Problema Evaluarea unei expresii Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include <fstream>
#include <cstring>
#include <algorithm>

using namespace std;

#define FIN "evaluare.in"
#define FOUT "evaluare.out"
#define MAX_N 100015

int N, pos;
char exp[MAX_N];

void read() {
    scanf("%s", exp);
    strcat(exp, "~");
}

int eval1();
int eval3() {
    int ret = 0;
    if (exp[pos] == '(') {
        ++pos;
        ret = eval1();
        ++pos;
        return ret;
    }
    while ('0' <= exp[pos] && exp[pos] <= '9')
        ret = ret * 10 + exp[pos++] - '0';
    return ret;
}

int eval2() {
    int ret;

    ret = eval3();
    while (exp[pos] == '*' || exp[pos] == '/') {
        if (exp[pos] == '*') {
            ++pos;
            ret *= eval2();
        }
        else {
            ++pos;
            ret /= eval2();
        }
    }

    return ret;
}

int eval1() {
    int ret;

    ret = eval2();
    while (exp[pos] == '+' || exp[pos] == '-') {
        if (exp[pos] == '+') {
            ++pos;
            ret += eval2();
        }
        else {
            ++pos;
            ret -= eval2();
        }
    }

    return ret;
}

void solve() {
    printf("%d\n", eval1());
}

int main() {
    freopen(FIN, "r", stdin);
    freopen(FOUT, "w", stdout);
    read();
    solve();
    return 0;
}