Cod sursa(job #420460)

Utilizator aghamatMorariu Razvan aghamat Data 19 martie 2010 11:59:09
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include <stdio.h>
#include <stdlib.h>
#include <cstdio>

const long Max=100000;
char s[Max], *p=s;

long factor();
long termen();

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

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

long factor()
{
     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,Max,stdin);
    printf("%ld\n",eval());
    return 0;
    
    }