Cod sursa(job #1139885)

Utilizator mihai995mihai995 mihai995 Data 11 martie 2014 16:31:35
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
#include <cstring>
using namespace std;

const int N = 100000, lvMax = 2;
const char lvOp[2][3] = {"+-", "*/"};

char s[N], *poz;

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

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

inline bool cifra(char c){
    return '0' <= c && c <= '9';
}

inline int getNumber(){
    int ans = 0;
    while ( cifra(*poz) ){
        ans = ans * 10 + *poz - '0';
        poz++;
    }
    return ans;
}

inline int eval(int a, int b, char op){
    if ( op == '+' )
        return a + b;
    if ( op == '-' )
        return a - b;
    if ( op == '*' )
        return a * b;
    if ( op == '/' )
        return a / b;
    return -1;
}

int compute(int lv){
    if (lv == lvMax){
        if ( cifra(*poz) )
            return getNumber();
        poz++;
        int ans = compute(0);
        poz++;
        return ans;
    }
    int ans = compute(lv + 1);
    while (*poz && strchr(lvOp[lv], *poz) ){
        poz++;
        ans = eval( ans, compute(lv + 1), *(poz - 1) );
    }
    return ans;
}

int main(){
    in >> s;
    poz = s;
    out << compute(0) << "\n";
    return 0;
}