Cod sursa(job #156565)

Utilizator DorinOltean Dorin Dorin Data 12 martie 2008 17:08:11
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
# include <stdio.h>
# include <vector>

using namespace std;

# define input "evaluare.in"
# define output "evaluare.out"

# define max 100001

char s[max];
long pos;

long eval();

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

long termen()
{
     long ret = factor();
     while(s[pos] == '*' || s[pos] == '/')
     {
         switch(s[pos])
         {
             case '*' :
                  pos++;
                  ret*=factor();
             break;
             case '/' :
                  pos++;
                  ret/=factor();
             break;
         }
     }
     return ret;
}

long eval()
{
     long ret;
     
     ret = termen();
     while(s[pos] == '+' || s[pos] == '-')
     {
        switch(s[pos])
        {
           case '+': 
                pos++;
                ret+=termen();
           break;
           case '-':
                pos++;
                ret-=termen();
           break;
        }
     }
     
     return ret;
}

int main()
{
    freopen(input, "r", stdin);
    freopen(output, "w", stdout);
    
    scanf("%s",s);
    printf("%ld",eval());
    return 0;
}