Cod sursa(job #793214)

Utilizator Viva12Ferentz Sergiu Viva12 Data 2 octombrie 2012 12:18:31
Problema Evaluarea unei expresii Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.5 kb
#include <cstdio>
#include <cstring>
#define N 100050

using namespace std;

char s[N];
int sum = 0;
void citire()
{

    scanf("%s",s);
}


int term(int st,int dr)
{
    int x = 0 ;
    for (int i=st; i <=dr;i++)
    {
        x = x*10 + s[i]-'0';
    }

    return x;
}

int evalExp(int st,int dr)
{

    int nrparant =0;
    if (s[st] =='(' && s[dr] == ')')
        return evalExp(st+1,dr-1);

    for (int i = st; i <= dr;i++)
    {

        if (s[i] == '(')
            nrparant++;
        else
            if (s[i] ==')')
                nrparant--;
            else
                if (s[i] == '+' && nrparant == 0)
                    return evalExp(st,i-1) + evalExp(i+1,dr);
                else
                    if (s[i] == '-' && nrparant == 0)
                        return evalExp(st,i-1) - evalExp(i+1,dr);

    }

    for (int i = st; i <= dr;i++)
    {
        if (s[i] == '(')
            nrparant++;
        else
            if (s[i] ==')')
                nrparant--;
            else
                if (s[i] == '*' && nrparant == 0)
                    return evalExp(st,i-1) * evalExp(i+1,dr);
                else
                    if (s[i] == '/' && nrparant == 0)
                        return evalExp(st,i-1) / evalExp(i+1,dr);

    }
    return term(st,dr);

}

int main()
{
    freopen("evaluare.in","r",stdin);
    freopen("evaluare.out","w",stdout);
    citire();

    printf("%d",evalExp(0,strlen(s)-1));
    return 0;
}