Cod sursa(job #2737104)

Utilizator trifangrobertRobert Trifan trifangrobert Data 4 aprilie 2021 14:07:10
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>
#include <cstring>

using namespace std;

const int NMAX = 100000;
int p, N;
char s[NMAX + 5];
int factor(), expr(), termen();

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

int termen() {
    int x = factor();
    while (p <= N && (s[p] == '*' || s[p] == '/')) {
        ++p;
        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 <= N && ('0' <= s[p] && s[p] <= '9')) {
            x = x * 10 + (s[p] - '0');
            ++p;
        }
    }
    return x;
}

int main() {
    ifstream fin("evaluare.in");
    ofstream fout("evaluare.out");
    fin >> (s + 1);
    p = 1;
    N = strlen(s + 1);
    fout << expr() << "\n";
    fin.close();
    fout.close();
    return 0;
}