Cod sursa(job #1229710)

Utilizator afkidStancioiu Nicu Razvan afkid Data 17 septembrie 2014 23:10:06
Problema Evaluarea unei expresii Scor 30
Compilator c Status done
Runda Arhiva educationala Marime 1.11 kb
#include <stdio.h>
#include <stdlib.h>

char* s;
int term();
int evaluate();
int fact();

int term()
{
    int number=fact();
    if(*s=='*')
    {
        s++;
        number*=fact();
    }
    else if(*s=='/')
    {
        s++;
        number/=fact();
    }
    return number;
}
int evaluate()
{
    int x=term();
    while(s)
    {
        if(*s=='-')
        {
            s++;
            x-=term();
        }
        else if(*s=='+')
        {
            s++;
            x+=term();
        }
        else break;
    }
    return x;
}

int fact()
{
    int number=0;
    if(*s=='(')
    {
        s++;
        number+=evaluate();
        s++;
    }
    else while(*s>='0'&&*s<='9')
    {
        number=number*10+(*s-'0');
        s++;
    }
    return number;

}
void arithmetic_eval(char *expression)
{
    s=expression;
    printf("%d",evaluate());
}

int main()
{
    freopen("evaluare.in","r",stdin);
    freopen("evaluare.out","w",stdout);
    char expression[200000];
    scanf("%s",&expression);
    arithmetic_eval(expression);
    return 0;
}