Cod sursa(job #2870263)

Utilizator PopaMihaimihai popa PopaMihai Data 12 martie 2022 11:18:16
Problema Evaluarea unei expresii Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int NMAX = 100003;

char s[NMAX], *p;

static inline int EVAL();
static inline int TERMEN();
static inline int FACTOR();

static inline int EVAL()
{
    int rasp = TERMEN();
    if(*p == '+' || *p == '-') {
        if(*p == '+')
            p++, rasp += TERMEN();
        else p++, rasp -= TERMEN();
    }
    return rasp;
}

static inline int TERMEN()
{
    int rasp = FACTOR();
    if(*p == '*' || *p == '/') {
        if(*p == '*')
            p++, rasp *= FACTOR();
        else p++, rasp /= FACTOR();
    }
    return rasp;
}

static inline int FACTOR()
{
    if(*p == '(') {
        p++;
        int rasp = EVAL();
        p++;
        return rasp;
    }

    int nr = 0;
    int sign = 1;

    if(*p == '-')
        sign = -1, p++;


    while('0' <= *p && *p <= '9') {
        nr = nr * 10 + *p - '0';
        p++;
    }
    return nr * sign;
}

int main()
{
    fin >> (s + 1);
    p = (s + 1);
    fout << EVAL() << '\n';
    return 0;
}