Cod sursa(job #879360)

Utilizator caliuxSegarceanu Calin caliux Data 15 februarie 2013 12:08:11
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <stdio.h>
#define NMAX 100002
using namespace std;
char s[NMAX];
int p;
int expresie();
int factor(){
    int val = 0, semn = 1;
    while(s[p] == '-'){
        p++;
        semn = -semn;
    }
    if(s[p] == '('){
        p++;
        val = expresie();
        p++;
        return semn * val;
    }
    while(s[p] >= '0' && s[p] <= '9'){
        val *= 10;
        val += (s[p] - '0');
        p++;
    }
    return semn * val;
}
int termen(){
    int prod = factor();
    while(s[p] == '*' || s[p] == '/'){
        if(s[p] == '*'){
            p++;
            prod *= factor();
        }else{
            p++;
            prod /= factor();
        }
    }
    return prod;
}
int expresie(){
    int sum = termen();
    while(s[p] == '+' || s[p] == '-'){
        if(s[p] == '+'){
            p++;
            sum += termen();
        }else{
            p++;
            sum -= termen();
        }
    }
    return sum;
}
int main(){
    freopen("evaluare.in", "r", stdin);
    freopen("evaluare.out", "w", stdout);
    gets(s);
    int rez;
    p = 0; rez = expresie();
    printf("%d", rez);
}