Cod sursa(job #856471)

Utilizator macajouMaca George macajou Data 16 ianuarie 2013 15:42:16
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <cstdio>

char s[100001];
int i;

long eval();

long factor()
{
    long x=0;
    if(s[i]=='(')
       {
           i++;
           x=eval();
           i++;
       }
    else
        while(s[i]>='0' && s[i]<='9')
              {
                  x=x*10+(s[i]-'0');
                  i++;
              }
    return x;
}

long termen()
{
    long x=factor();
    while(s[i]=='*' || s[i]=='/')
          {
              if(s[i]=='*')
                 {
                     i++;
                     x*=factor();
                 }
              else
                  {
                      i++;
                      x/=factor();
                  }
          }
    return x;
}

long eval()
{
    long x=termen();
    while(s[i]=='+' || s[i]=='-')
          {
              if(s[i]=='+')
                 {
                     i++;
                     x+=termen();
                 }
              else
                  {
                      i++;
                      x-=termen();
                  }
          }
    return x;
}

int main()
{
    freopen("evaluare.in","r",stdin);
    freopen("evaluare.out","w",stdout);

    gets(s);
    printf("%ld",eval());
    return 0;
}