Cod sursa(job #339453)

Utilizator tamas_iuliaTamas Iulia tamas_iulia Data 9 august 2009 21:21:23
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <stdio.h>
#define Nmax 100005

char s[Nmax],*p=s;

void read(){
	freopen("evaluare.in","r",stdin);
   freopen("evaluare.out","w",stdout);
	fgets(s,Nmax,stdin);
}

int termen();
int factor();
int eval();

int eval(){
	int rez = termen();
   while(*p=='+' || *p=='-'){
     if(*p =='+'){
         p++;
      	rez += termen();
     }
     else
     if(*p =='-'){
         p++;
       	rez -= termen();
     }
   }
  return rez;
}

int termen(){
	int rez = factor();
   while(*p=='*' || *p=='/'){
     if(*p =='*'){
         p++;
      	rez *= factor();
     }
     else
     if(*p =='/'){
         p++;
   	   rez /= factor();
     }
   }
  return rez;
}

int factor(){
	int rez=0;
   if(*p =='('){
   	p++;
      rez =eval();
      p++;
   }
   else
   	while(*p >='0' && *p<='9'){
      	rez = rez*10 + *p-'0';
         p++;
      }
   return rez;
}

int main(){

	read();

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

   fclose(stdin); fclose(stdout);
   return 0;
}