Cod sursa(job #1095366)

Utilizator A63N7pTudor Nazarie A63N7p Data 30 ianuarie 2014 19:52:39
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <cstdio>
using namespace std;

const long MAX = 100010;
char S[MAX], *p = S;

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

int main(int argc, char *argv[])
{
    fgets(S, MAX, fopen("evaluare.in", "r"));
    fprintf(fopen("evaluare.out", "w"), "%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;
}