Cod sursa(job #1864456)

Utilizator razvandRazvan Dumitru razvand Data 31 ianuarie 2017 19:34:22
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int eval();
int term();
int fact();

string s;
int p;

int eval() {
    int a = term();
    while(p < s.size() && (s[p] == '+' || s[p] == '-')) {
        if(s[p] == '+') {
            p++;
            a += term();
            continue;
        }
        if(s[p] == '-') {
            p++;
            a -= term();
            continue;
        }
    }
    //cout << "T2 " << a << " " << p << '\n';
    return a;
}

int term() {
    int a = fact();
    while(p < s.size() && (s[p] == '*' || s[p] == '/')) {
        if(s[p] == '*') {
            p++;
            a *= fact();
            continue;
        }
        if(s[p] == '/') {
            p++;
            a /= fact();
            continue;
        }
    }
    //cout << "T3 " << a << " " << p << '\n';
    return a;
}

int fact() {
    if(s[p] == '(') {
        p++;
        int a = eval();
        p++;
        return a;
    }

    int a = 0;

    while(s[p] >= '0' && s[p] <= '9') {
        a = a*10 + (s[p] - '0');
        p++;
    }

    //cout << p << " " << a << '\n';

    return a;

}

int main() {

    in >> s;
    out << eval();

    return 0;
}