Cod sursa(job #145948)

Utilizator moga_florianFlorian MOGA moga_florian Data 29 februarie 2008 19:28:41
Problema Evaluarea unei expresii Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include<fstream>
using namespace std;

char s[100005];

int grad(char ch){
    if(ch == '+' || ch=='-')
        return 1;
    return 2;
}

int eval(int li, int lf){

    int par = 0, poz = -1, minim = 3;
    for(int i=li;i<=lf;i++)
        if(s[i] == '(')
            par++;
        else
            if(s[i] == ')')
                par--;
            else
                if('0' <= s[i] && s[i] <= '9');
                else
                    if(par == 0 && grad(s[i]) <= minim){
                        minim = grad(s[i]);
                        poz = i;
                    }

    if(poz == -1){
        if(s[li] == '(')
            return eval(li+1,lf-1);
        else{
            int val = 0;
            for(int i=li;i<=lf;i++)
                val = val*10 + s[i] - '0';
            return val;
        }
    }

    if(s[poz] == '-')
        return eval(li,poz-1) - eval(poz+1,lf);
    else
        if(s[poz] == '+')
            return eval(li,poz-1) + eval(poz+1,lf);
        else
            if(s[poz] == '*')
                return eval(li,poz-1) * eval(poz+1,lf);
    return eval(li,poz-1) / eval(poz+1,lf);

}

int main(){

    ifstream fin("evaluare.in");
    ofstream fout("evaluare.out");
    
    fin>>s;
    
    fout<<eval(0,strlen(s)-1)<<"\n";
    
    fin.close();
    fout.close();
    return 0;

}