Cod sursa(job #3368478)

Utilizator Maya_PopaPopa Maya Diana Maya_Popa Data 14 octombrie 2026 19:43:38
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.75 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
void spatiu(const string& s, int& p) {
    while (p<s.size() && s[p]==' ') {
        p++;
    }
}
long long expresie(const string& s, int& p);
long long termen(const string& s, int& p);
long long factor(const string& s, int& p);
long long factor(const string& s, int& p) {
    spatiu(s, p);
    if (p<s.size() && s[p]=='(') {
        p++;
        long long sol=expresie(s, p);
        spatiu(s, p);
        if (p<s.size() && s[p]==')') {
            p++;
        }
        return sol;
    }
    if (p<s.size() && isdigit(s[p])) {
        long long val=0;
        while (p<s.size() && isdigit(s[p])) {
            val=val*10+(s[p]-'0');
            p++;
        }
        return val;
    }
    return 0;
}
long long termen(const string& s, int& p) {
    spatiu(s, p);
    long long sol=factor(s, p);
    spatiu(s, p);
    while (p<s.size() && (s[p]=='*' || s[p]=='/')) {
        char op=s[p];
        p++;
        long long x=factor(s, p);
        if (op=='*') {
            sol*=x;
        } else if (op=='/') {
            sol/=x;
        }
        spatiu(s, p);
    }
    return sol;
}
long long expresie(const string& s, int& p) {
    spatiu(s, p);
    long long sol=termen(s, p);
    spatiu(s, p);
    while (p<s.size() && (s[p]=='+' || s[p]=='-')) {
        char op=s[p];
        p++;
        long long x=termen(s, p);
        if (op=='+') {
            sol+=x;
        } else if (op=='-') {
            sol-=x;
        }
        spatiu(s, p);
    }
    return sol;
}
int main() {
    string s;
    fin>>s;
    int p=0;
    long long sol=expresie(s, p);
    fout<<sol<<"\n";
    return 0;
}