Cod sursa(job #624190)

Utilizator cristianalex81Cristian Alexandru cristianalex81 Data 21 octombrie 2011 22:48:35
Problema Evaluarea unei expresii Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.29 kb
#include <stdio.h>
#define dim 100001

char string[dim],*p=string;

long priority1();
long priority2();
long priority3();

long priority1()
{
    long r=priority2();
    while ((*p=='+')||(*p=='-'))//while next operator is on the same priority level
    {
        if (*p=='+')
        {
            p++;
            r+=priority2();
        }
        if (*p=='-')
        {
            p++;
            r-=priority2();
        }
    }
    return r;
}

long priority2()
{
    long r=priority3();
    while ((*p=='*')||(*p=='/'))//while next operator is on the same priority level
    {
        if (*p=='*')
        {
            p++;
            r*=priority3();
        }
        if(*p=='/')
        {
            p++;
            r/=priority3();
        }
    }
    return r;
}

long priority3()//caracter is not a operand
{
    long r=0;
    if (*p=='(')
    {
        p++; //jump over opening parantheses
        r = priority1(); // evaluate inner expresion
        p++; //jump over closing parantheses
    }
    else
    {
        while ((*p>='0')&&(*p<='9'))
        {
            r = r*10 + *p-'0';
            p++;
        }
    }
    return r;
}

int main()
{
    freopen("evaluare.in","r",stdin);
    freopen("evaluare.out","w",stdout);
    scanf("%s",string);
    printf("%ld\n",priority1());
    return 0;
}