Cod sursa(job #1111932)

Utilizator IonSebastianIon Sebastian IonSebastian Data 19 februarie 2014 11:42:12
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <fstream>

using namespace std;

ifstream in("evaluare.in");
ofstream out("evaluare.out");

const int MAX_N = 100000;

char v[MAX_N+1];
int poz;

int expresie();
int factor();
int termen();

int expresie(){
    int e;
    e = termen();
    while (v[poz] == '+' || v[poz] == '-') {
        if (v[poz] == '+') {
            poz++;
            e += termen();
        } else {
            poz++;
            e -= termen();
        }
    }
    return e;
}

int termen(){
    int t = factor();
    while(v[poz] == '*' || v[poz] == '/'){
        if(v[poz] == '*'){
            poz++;
            t *= factor();
        } else {
            poz++;
            t /= factor();
        }
    }
    return t;
}

int factor(){
    int f = 0, semn = 1;
    while(v[poz] == '-'){
        poz++;
        semn *= -semn;
    }
    if(v[poz] == '('){
        poz++;
        f = expresie();
        poz++;
        return f*semn;
    }
    while(v[poz] >= '0' && v[poz] <= '9'){
        f = f*10 + (v[poz++]-'0');
    }
    return f*semn;
}

int main()
{
    in >> v;
    out << expresie();
    return 0;
}