Cod sursa(job #184568)

Utilizator vanila_CPPIonescu Victor Cristian vanila_CPP Data 23 aprilie 2008 21:05:42
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.6 kb
#include <iostream>
#define MAX 100010
using namespace std;
char s[MAX],*p=s;

long termen(void);
long factor(void);


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

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


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

int main(void){
        freopen("evaluare.in","rt",stdin);
        freopen("evaluare.out","wt",stdout);
        fgets(s,MAX,stdin);
        printf("%ld",eval());
        fclose(stdin);fclose(stdout);
        return 0;
}