Cod sursa(job #2843233)

Utilizator AndreiBadAndrei Badulescu AndreiBad Data 2 februarie 2022 11:06:24
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
//
//  main.cpp
//  Evaluarea unei expresii (infoarena)
//
//  Created by Andrei Bădulescu on 02.02.22.
//

#include <fstream>
#include <cctype>

using namespace std;

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

char s[100001];
int p = 0;

int expresie();
int termen();
int factor();

int expresie() {
    int sum = termen();
    
    while (s[p] == '+' || s[p] == '-') {
        if (s[p] == '+') {
            p++;
            sum += termen();
        } else {
            p++;
            sum -= termen();
        }
    }
    
    return sum;
}

int termen() {
    int produs = factor();
    
    while (s[p] == '*' || s[p] == '/') {
        if (s[p] == '*') {
            p++;
            produs *= factor();
            
        } else {
            p++;
            produs /= factor();
        }
    }
    
    return produs;
}

int factor() {
    int val = 0, sign = 1;
    
    while(s[p] == '-') {
        sign *= -1;
        p++;
    }
    
    if (s[p] == '(') {
        p++;
        val = expresie();
        p++;
        return val * sign;
    }
    
    while (isdigit(s[p])) {
        val = val * 10 + s[p] - '0';
        p++;
    }
    
    return val * sign;
}

int main() {
    in.getline(s, 100000);
    out << expresie();
    return 0;
}