Cod sursa(job #560744)

Utilizator palcuiealexAlex Palcuie palcuiealex Data 18 martie 2011 17:38:43
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

const int SMAX = 100010;
char s[SMAX];
char* p = s;

int EvalExpres();
int EvalFactor();
int EvalTermen();

int EvalExpres(){
    int x = EvalTermen();

    while (*p == '+' || *p == '-'){
        switch (*p){
        	case '+':
                ++p;
                x += EvalTermen();
        		break;

        	case '-':
                ++p;
                x -= EvalTermen();
        		break;
        }
    }

    return x;
}

int EvalTermen(){
    int x = EvalFactor();
    while ( *p == '*' || *p == '/' ){
        switch (*p){
        	case '*':
                ++p;
                x *= EvalFactor();
        		break;
        	case '/':
                ++p;
                x /= EvalFactor();
        		break;
        }
    }
    return x;
}

int EvalFactor(){
    int x=0;

    if (*p == '('){
        ++p;
        x = EvalExpres();
        ++p;
    }
    else{
        while(isdigit(*p)){
            x = x*10 + *p - '0';
            ++p;
        }
    }

    return x;
}

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

    scanf("%s",s);
    printf("%d\n",EvalExpres());

    return 0;
}