Cod sursa(job #160136)

Utilizator runnaway90Oprescu Radu Constantin runnaway90 Data 14 martie 2008 19:25:12
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include<stdio.h>
#include<string.h>

long i,n,v,lg;
char e[100001];

long Eval();
long EvalFactor();
long EvalTermen();
long EvalExpresie();

int main()
{
    freopen("evaluare.in","r",stdin);
    freopen("evaluare.out","w",stdout);
    scanf("%s",&e);
    
    lg=strlen(e);
    i=0;
    printf("%d",EvalExpresie());
    return 0;
}

long Eval()
{long f;
      for (f=0;e[i]>='0' && e[i]<='9'; i++)
	  f=f*10+(e[i]-'0');
      return f;
}

long EvalFactor()
{long f;
     if (e[i]=='('){
     		  i++;
		  f=EvalExpresie();
                  i++;
     }
     else{
	 f=Eval();
     }
     return f;
}

long EvalTermen()
{long r=EvalFactor();
     while(i<lg && (e[i]=='*'|| e[i]=='/')){
		i++;
		if (e[i-1]=='*')
		   r*=EvalFactor();
		else
		    r/=EvalFactor();
     }
     return r;
}

long EvalExpresie()
{long r=EvalTermen();
    while(i<lg && (e[i]=='+'|| e[i]=='-')){
	  i++;
	  if (e[i-1]=='+')
             r+=EvalTermen();
          else         
                       r-=EvalTermen();
    }
    return r;
}