Cod sursa(job #2193238)

Utilizator raul044Moldovan Raul raul044 Data 9 aprilie 2018 13:44:33
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <iostream>
#include <fstream>
#include <string>
#define maxL 100002

using namespace std;

ifstream fin("evaluare.in");
ofstream fout("evaluare.out");


char S[maxL], *p;

long termen();
long factor();

long eval () {
    long r = termen();
    while (*p == '+' or *p == '-') {
        switch (*p) {
            case '+':
                ++p;
                r += termen();
                break;
            case '-':
                ++p;
                r -= termen();
                break;
        }
    }
    return r;
}


long termen () {
    long r = factor();
    while (*p == '*' or *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' and *p <= '9') {
            r = r*10 + *p - '0';
            ++p;
        }
    }
    return r;
}


int main () {
    fin.getline(S, maxL);
    p = S;
    fout << eval();
    return 0;
}