Cod sursa(job #1890977)

Utilizator o_micBianca Costin o_mic Data 23 februarie 2017 17:25:40
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.48 kb
#include <iostream>
#include <fstream>
#include <set>
#include <vector>
#include <cmath>
#include <map>
#include <cstring>
#include <queue>
#include <stack>
#include <algorithm>
#define DN 105
#define DL 5005
#define x first
#define y second
#define LL long long
  
using namespace std;
 
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
 
// ifstream fin("input.txt");
// ofstream fout("output.txt");

int get_expression(string &expr, int &ind);

int get_factor(string &expr, int &ind) {
    int res = 0;
    if (expr[ind] == '(') {
        res = get_expression(expr, ++ind);
        ++ind;
    } else {
        while (ind < expr.size() && expr[ind] >= '0' && expr[ind] <= '9')
            res = res * 10 + expr[ind++] - '0';
    }
    return res;
}

int get_term(string &expr, int &ind) {
    int res = get_factor(expr, ind);
    while (ind != expr.size() && (expr[ind] == '*' || expr[ind] == '/')) {
        if (expr[ind] == '*')
            res *= get_factor(expr, ++ind);
        else
            res /= get_factor(expr, ++ind);
    }
    return res;
}

int get_expression(string &expr, int &ind) {
    int res = get_term(expr, ind);
    while (ind != expr.size() && (expr[ind] == '-' || expr[ind] == '+')) {
        if (expr[ind] == '+')
            res += get_term(expr, ++ind);
        else
            res -= get_term(expr, ++ind);
    }
    return res;
}

int main() {
    string expr;
    int ind = 0, res;

    fin >> expr;
    res = get_expression(expr, ind);
    fout << res;
    return 0;
}