Cod sursa(job #2111640)

Utilizator cristina-criCristina cristina-cri Data 22 ianuarie 2018 15:30:59
Problema Evaluarea unei expresii Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <cstdio>
#include <string.h>

using namespace std;

char s[100005];

void elimin_paranteze(int &st, int &dr)
{
    while(s[st]=='(' && s[dr]==')')
    {
        st++;
        dr--;
    }
}

int caut(char x, char y, int st, int dr)
{
    int nr=0;
    for(int i=dr;i>=st;i--)
    {
        if(s[i]==')')
            nr++;
        else if(s[i]=='(')
            nr--;
        if((s[i] == x || s[i] == y) && nr == 0)
            return i;
    }
    return -1;
}

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

int eval(int st, int dr)
{
    elimin_paranteze(st, dr);
    int p = caut('+', '-', st, dr);
    if(p == -1)
    {
        p=caut('*', '/', st, dr);
        if(p == -1)
            return int_str(st, dr);
    }
    int v1=eval(st, p-1);
    int v2=eval(p+1, dr);
    switch(s[p])
    {
        case '+':return v1+v2;
        case '-':return v1-v2;
        case '*':return v1*v2;
        case '/':return v1/v2;
    }
}

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

    scanf("%s", &s);

    printf("%d", eval(0, strlen(s)-1));

    return 0;
}