Cod sursa(job #2832708)

Utilizator Theodor17Pirnog Theodor Ioan Theodor17 Data 14 ianuarie 2022 10:42:01
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <fstream>
#include <cstring>

using namespace std;

ifstream cin("evaluare.in");
ofstream cout("evaluare.out");

const int NMAX = 1e5;
char *s = new char[NMAX + 5];
int p;
int expresie(); // expresie -> termen
int termen(); // termen -> factor
int factor(); // factor -> expresie (circuit)

int expresie(){

    int sum = termen();
    while(s[p] == '+' || s[p] == '-'){

        // mai urmeaza cel putin un termen
        if(s[p] == '+'){

            p++;
            sum += termen();

        }else{

            p++;
            sum -= termen();

        }

    }

    return sum;
}

int termen(){

    int prod = factor();

    while(s[p] == '*' || s[p] == '/'){

        if(s[p] == '*'){

            p++;
            prod *= factor();

        }else{

            p++;
            prod /= factor();

        }

    }

    return prod;
}

int factor(){

    int semn = 1, val = 0;

    while(s[p] == '-')
        p++, semn *= -1;

    if(s[p] == '('){

        p++;
        val = expresie();
        p++;

        return semn * val;
    }

    while(isdigit(s[p])){

        val = val * 10 + (s[p] - 48);
        p++;

    }

    return val * semn;
}       

int main(){

    cin.getline(s, NMAX);
    cout << expresie();

}