Cod sursa(job #262433)

Utilizator eugen.nodeaEugen Nodea eugen.nodea Data 19 februarie 2009 12:21:22
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
# include<stdio.h>
# define N 100010
char *p,s[N];
int cifra(char c)
{
    return (c>='0' && c<='9');
}
int eval();
int factor()
{
    int x=0;
    if(*p=='('){
	++p;
	x=eval();
	++p;
    }
    while(cifra(*p))
	x=x*10+((*p++)-'0');
    return x;
}
int termen()
{
    int x=factor();
    while(*p=='*' || *p=='/'){
	if(*p=='*'){
	    ++p;
	    x*=factor();
	}
	if(*p=='/'){
	    ++p;
	    x/=factor();
	}
    }
    return x;
}
int eval()
{
    int x=termen();
    while(*p=='+' || *p=='-'){
	if(*p=='+'){
	    ++p;
	    x+=termen();
	}
	if(*p=='-'){
	    ++p;
	    x-=termen();
	}
    }
    return x;
}
int main(){
    freopen("evaluare.in","r",stdin);
    freopen("evaluare.out","w",stdout);
    fgets(s,N,stdin);
    p=s;
    printf("%d\n",eval());
    return 0;
}