Cod sursa(job #1331740)

Utilizator PTAdrian64Pop-Tifrea Adrian PTAdrian64 Data 1 februarie 2015 09:09:56
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <cstdio>
#define nmax 100010

using namespace std;

char expresie[nmax];
char *p = expresie;

long termen();
long factor();
long eval();

int main(){
    freopen("evaluare.in","r",stdin);
    freopen("evaluare.out","w",stdout);
    fgets(expresie,nmax,stdin);
    printf("%ld\n",eval());
    return 0;
}

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;
}