Cod sursa(job #922225)

Utilizator supermitelArdelean Razvan Mitel supermitel Data 21 martie 2013 23:18:41
Problema Evaluarea unei expresii Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <cstdio>
#include <algorithm>
#include <cstring>

using namespace std;

char s[100010];
int n;

int capat(int x)
{
    int sens, grad, i;
    if(s[x]=='(')
        sens=1;
    else
        sens=-1;
    grad=1;
    i=x;
    while(grad)
    {
        i+=sens;
        if(s[i]=='('||s[i]==')')
            if(s[i]==s[x])
                grad++;
            else
                grad--;
    }
    return i;
}

int eval(int st, int dr)
{
    while(s[st] == '(' && capat(st) == dr)
        st++,dr--;
    int i;
    for(i=dr;i>st;i--)
        if(s[i]==')')
            i=capat(i);
        else if(s[i]=='+')
            return eval(st,i-1)+eval(i+1,dr);
        else if(s[i]=='-')
            return eval(st,i-1)-eval(i+1,dr);
    for(i=dr;i>st;i--)
        if(s[i]==')')
            i=capat(i);
        else if(s[i]=='*')
            return eval(st,i-1)*eval(i+1,dr);
        else if(s[i]=='/')
            return eval(st,i-1)/eval(i+1,dr);
    int numar;
    sscanf(s+st,"%d",&numar);
    return numar;
}

int main()
{
    freopen("evaluare.in","r",stdin);
    freopen("evaluare.out","w", stdout);
    gets(s);
    n=strlen(s);
    printf("%d", eval(0, n-1));
    return 0;
}