Cod sursa(job #717171)

Utilizator algotrollNume Fals algotroll Data 19 martie 2012 18:37:34
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.4 kb
#include<cstdio>
#include<cstdlib>
#include<cstring>
char sExp[100010];

int evaluate(char*,char*);
int main()
{
    freopen("evaluare.in","r",stdin);
    freopen("evaluare.out","w",stdout);
    gets(sExp);
    printf("%d", evaluate(sExp,sExp +strlen(sExp)-1));
    return 0;
}

int ev_n(char*&);
int evaluate(char* pBeg, char* pEnd)
{
    int rez=0, termen=1;
    for (char* pC=pBeg;pC<=pEnd;pC++)
        switch (*pC)
        {
            case '+':
                rez+=termen;
                termen=1;
                break;
            case '-':
                rez+=termen;
                termen=-1;
                break;
            case '*':
                termen*=ev_n(++pC); break;
            case '/':
                termen/=ev_n(++pC); break;
            default:
                termen*=ev_n(pC);
        }
    rez+=termen;
    return rez;
}

int ev_n(char* &pC)
{
    if (*pC=='(')
        {
            int parant=0;
            for (char *pI=pC;;pI++)
            {
                if (*pI=='(') parant++;
                else if (*pI==')') parant--;
                if (parant==0)
                {
                    int rez=evaluate(pC+1,pI-1);
                    pC=pI;
                    return rez;
                }
            }
        }
        else
        {
            int rez=strtod(pC,&pC); pC--;
            return rez;
        }
}