Cod sursa(job #1778651)

Utilizator elffikkVasile Ermicioi elffikk Data 13 octombrie 2016 22:50:40
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
using namespace std;

long operation(long x, long y, char c) {
    if (c == '+')  return x+y;
    if (c == '-')  return x-y;
    if (c == '*')  return x*y;
    return x/y;
}

long eval(string::iterator a, string::iterator b) {
    string op[2] = {"+-", "*/"};
    for (int j = 0; j < 2; j++) {
        int p = 0;
        for (string::iterator i = b-1; i >= a; i--) {
            if (*i == '(') {
                p++;
            } else if (*i == ')') {
                p--;
            }
            else if (p==0 && op[j].find(*i) != string::npos) {
                return operation(eval(a, i), eval(i+1, b), *i);
            }
        }
    }
    if (*a == '(') {
        return eval(a+1, b-1);
    }
    return atoi(string(a, b).data());
}

int main() {
    ifstream fin("evaluare.in");
    ofstream fout("evaluare.out");
    string s;
    getline(fin, s);
    fout<<eval(s.begin(), s.end());
    return 0;
}