Cod sursa(job #1267386)

Utilizator Alexa2001Alexa Tudose Alexa2001 Data 19 noiembrie 2014 20:34:02
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <cstdio>
#include <cstring>
using namespace std;

char p[100000];
int nr,i;

int eval();

bool is(char x)
{
    if(x<'0') return 0;
    if(x>'9') return 0;
    return 1;

}

int factor()
{
    int f=0;

    if(p[i]=='(') {++i;f=eval();++i;}
    else
    while(is(p[i]))
    {
        f=f*10+p[i]-'0';
        ++i;
    }

    return f;

}

int termen()
{
    int fact;

    fact=factor();

    while(p[i]=='*' || p[i]=='/')
    {

        if(p[i]=='*')
        {
            i++;
            fact*=factor();
        }

        else
        {
            i++;
            fact/=factor();
        }
    }

    return fact;

}

int eval()
{

    int nr=0;

    nr=termen();

    while(p[i]=='+' || p[i]=='-' )
    {

        if(p[i]=='+')
        {
            i++;
            nr+=termen();
        }
        else if(p[i]=='-')
        {
            i++;
            nr-=termen();
        }
    }

    return nr;

}

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

    i=0;
    gets(p);

    printf("%d\n",eval());

    return 0;
}