Cod sursa(job #754782)

Utilizator visanrVisan Radu visanr Data 3 iunie 2012 13:46:15
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.61 kb
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;


#define nmax 100010

char s[nmax], *p = s;


long prod();
long par();


long eval()
{
     long r = prod();
     while(*p == '+' || *p == '-')
     {
              switch(*p)
              {
                        case '+': 
                             ++p;
                             r += prod();
                             break;
                        case '-':
                             ++p;
                             r -= prod();
                             break;
              }
     }
     return r;
}

long prod()
{
     long r = par();
     while(*p == '*' || *p == '/')
     {
              switch(*p)
              {
                        case '*':
                             ++p;
                             r *= par();
                             break;
                        case '/':
                             ++p;
                             r /= par();
                             break;
              }
     }
     return r;
}

long par()
{
     long r = 0;
     if(*p == '(')
     {
           ++p;
           r = eval();
           ++p;
     }else
     {
          while(*p >= '0' && *p <= '9')
          {
                   r = r * 10 + *p - '0';
                   ++p;
          }
     }
     return r;
}


int main()
{
    freopen("evaluare.in", "r", stdin);
    freopen("evaluare.out", "w", stdout);
    fgets(s, nmax, stdin);
    printf("%ld\n", eval());
    int i;
    scanf("%i", &i);
    return 0;
}