Cod sursa(job #1573197)

Utilizator dragomir_ioanDragomir Ioan dragomir_ioan Data 19 ianuarie 2016 14:45:12
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <cstdio>
using namespace std;

char S[100010], *p=S;

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

long long eval() {
    long long rezultat = termen();
    while(*p == '+' || *p == '-') {
        if(*p == '+') {
            p++;
            rezultat += termen();
        }
        else if(*p == '-') {
            p++;
            rezultat -= termen();
        }
    }
    return rezultat;
}

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

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

int main() {
    freopen("evaluare.in", "r", stdin);   scanf("%s", &S);
    freopen("evaluare.out", "w", stdout); printf("%lld\n", eval());
    return 0;
}