Cod sursa(job #155680)

Utilizator Mishu91Andrei Misarca Mishu91 Data 12 martie 2008 08:25:30
Problema Evaluarea unei expresii Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <cstdio>
#define Nmax 100002

FILE *fin=freopen("evaluare.in","r",stdin),
     *fout=freopen("evaluare.out","w",stdout);
  
char A[Nmax];

int k;
     
int termen();
int factor();

int eval()
{
  int r = termen();
  while(A[k] == '+' || A[k] == '-')
  {
    
    switch(A[k])
    {
      case '+':
        k++;
        r += termen();
      break;
       
      case '-':
        k++;
        r -= termen();
      break;
    }
  }
   return r;
}

int termen()
{
  int r = factor();
  while(A[k] == '*' || A[k] == '/')
  {
    
    switch(A[k])
    {
      case '*':
        k++;
        r *= termen();
      break;
       
      case '/':
        k++;
        r /= termen();
      break;
    }
  }
  return r;
}    
     
int factor()
{
  int r = 0;
  
  if( A[k] == '(')
  {
    ++k;
    r= eval();
    ++k;
  }
  
  else 
    while (A[k] >= '0' && A[k] <= '9')
    {
      r=r*10 +  A[k] - '0';
      ++k;
    }
  return r;
}
     
int main()
{
  gets(A);
  
  printf("%d\n",eval());
  return 0;
}