Cod sursa(job #3294057)

Utilizator florin123457Aioanei Florin Adrian florin123457 Data 15 aprilie 2025 15:14:29
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.36 kb
#include <fstream>
#include <string>
using namespace std;

ifstream f("evaluare.in");
ofstream g("evaluare.out");
string s;
int p;

int expression();
int term();
int factor();

int expression() {
    int result = term();
    while (p < s.length() && (s[p] == '+' || s[p] == '-')) {
        if (s[p] == '+') {
            p++;
            result += term();
        } else {
            p++;
            result -= term();
        }
    }
    return result;
}

int term() {
    int result = factor();
    while (p < s.length() && (s[p] == '*' || s[p] == '/')) {
        if (s[p] == '*') {
            p++;
            result *= factor();
        } else {
            p++;
            int divisor = factor();
            if (divisor != 0) {
                result /= divisor;
            } else {
                g << "Error: Division by zero\n";
                return 0;
            }
        }
    }
    return result;
}

int factor() {
    if (s[p] == '(') {
        p++; 
        int result = expression();
        p++; 
        return result;
    } else {
        int start = p;
        while (p < s.length() && isdigit(s[p])) {
            p++;
        }
        return stoi(s.substr(start, p - start));
    }
}

int main() {
    f >> s;
    p = 0;
    
    int result = expression();
    g << result;

    return 0;
}