Cod sursa(job #1617359)

Utilizator BrandonChris Luntraru Brandon Data 27 februarie 2016 13:05:18
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <fstream>
#include <string>

using namespace std;

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

string str;

int curr;

int priority1();
int priority2();
int priority3();

int priority3() {
    int nr = priority2();

    while(str[curr] == '+' or str[curr] == '-') {
        if(str[curr] == '+') {
            ++curr;
            nr += priority2();
        }
        else {
            ++curr;
            nr -= priority2();
        }
    }

    return nr;
}

int priority2() {
    int nr = priority1();

    while(str[curr] == '*' or str[curr] == '/') {
        if(str[curr] == '*') {
            ++curr;
            nr *= priority1();
        }
        else {
            ++curr;
            nr /= priority1();
        }
    }

    return nr;
}

int priority1() {
    int nr = 0;

    if(str[curr] == '(') {
        ++curr;
        nr = priority3();
        ++curr;
    }
    else {
        while(isdigit(str[curr])) {
            nr *= 10;
            nr += str[curr] - '0';
            ++curr;
        }
    }

    return nr;
}

int main() {
    cin >> str;
    cout << priority3() << '\n';
    return 0;
}