Cod sursa(job #1974393)

Utilizator MaligMamaliga cu smantana Malig Data 27 aprilie 2017 15:32:11
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <stack>

using namespace std;
ifstream in("evaluare.in");
ofstream out("evaluare.out");

#define ll long long
const int strMax = 1e5 + 5;

int N;
char str[strMax];

int eval(int&);
int termen(int&);
int factor(int&);

int main() {
    in>>str;

    int i = 0, ans = eval(i);
    out<<ans<<'\n';

    in.close();out.close();
    return 0;
}

int eval(int& i) {
    int ans = termen(i);
    while (str[i] == '+' || str[i] == '-') {
        switch (str[i]) {
        case '+':
            ans += termen(++i);
            break;
        case '-':
            ans -= termen(++i);
        }
    }
    return ans;
}

int termen(int& i) {
    int ans = factor(i);
    while (str[i] == '*' || str[i] == '/') {
        switch (str[i]) {
        case '*':
            ans *= factor(++i);
            break;
        case '/':
            ans /= factor(++i);
        }
    }
    return ans;
}

int factor(int& i) {
    int ans;
    if (str[i] == '(') {
        ans = eval(++i);
        ++i;
    }
    else {
        ans = 0;
        while ('0' <= str[i] && str[i] <= '9') {
            ans = ans * 10 + (str[i]-'0');
            ++i;
        }
    }
    return ans;
}