Cod sursa(job #3153501)

Utilizator trifangrobertRobert Trifan trifangrobert Data 29 septembrie 2023 22:35:57
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>
#include <string>

using namespace std;

int expr();
int term();
int factor();
string s;
int p = 0, sz;

int expr() {
    int x = term();
    while (p < sz && (s[p] == '+' || s[p] == '-')) {
        p += 1;
        if (s[p - 1] == '+') {
            x += term();
        }
        else {
            x -= term();
        }
    }
    return x;
}

int term() {
    int x = factor();
    while (p < sz && (s[p] == '*' || s[p] == '/')) {
        p += 1;
        if (s[p - 1] == '*') {
            x *= factor();
        }
        else {
            x /= factor();
        }
    }
    return x;
}

int factor() {
    int x = 0;
    if (s[p] == '(') {
        ++p;
        x = expr();
        ++p;
    }
    else {
        while (p < sz && ('0' <= s[p] && s[p] <= '9')){
            x = x * 10 + (s[p] - '0');
            p += 1;
        }
    }
    return x;

}

int main() {
    ifstream fin("evaluare.in");
    ofstream fout("evaluare.out");
    fin >> s;
    sz = s.length();
    fout << expr() << "\n";
    fin.close();
    fout.close();
    return 0;
}