Cod sursa(job #1232200)

Utilizator Sanduleac_VladSanduleac Vllad Alexandru Sanduleac_Vlad Data 22 septembrie 2014 12:56:10
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <cstdio>
using namespace std;

long expresie(char *&);
long termen(char *&);
long factor(char *&);

long expresie(char *&p) {
    long sum = termen(p);
    while(*p == '+' || *p == '-') {
        if(*p == '+') {
            p++;
            sum += termen(p);
        } else {
            p++;
            sum -= termen(p);
        }
    }
    return sum;
}

long termen(char *&p) {
    long sum = factor(p);
    while(*p == '*' || *p == '/') {
        if(*p == '*') {
            p++;
            sum *= factor(p);
        } else {
            p++;
            sum /= factor(p);
        }
    }
    return sum;
}

long factor(char *&p) {
    long semn = 1, val = 0;
    while(*p == '-') {
        p++;
        semn *= -1;
    }
    if(*p == '(') {
        p++;
        val = expresie(p);
        p++;
        return semn * val;
    }
    while(*p >= '0' && *p <= '9') {
        val *= 10;
        val += *p - '0';
        p++;
    }
    return semn * val;
}

char exp[100005];
char *p;

int main() {
    long i, j;
    freopen("evaluare.in", "r", stdin);
    freopen("evaluare.out", "w", stdout);
    gets(exp);
    p = exp;
    printf("%ld\n", expresie(p));
    return 0;
}