Cod sursa(job #1778396)

Utilizator elffikkVasile Ermicioi elffikk Data 13 octombrie 2016 19:06:05
Problema Evaluarea unei expresii Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

long s2i(string::iterator a, string::iterator b) {
    long r = 0;
    for (string::iterator i = a; i < b; i++) {
        r = r*10 + (*i-'0');
    }
    return r;
}

long operatie(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 = "+-*/";
    for (string::iterator j = op.begin(); j < op.end(); j++) {
        int p = 0;
        for (string::iterator i = a; i < b; i++) {
            if (*i == '(') {
                p++;
            } else if (*i == ')') {
                p--;
            }
            else if (p==0 && *i==*j) {
                return operatie(eval(a, i), eval(i+1, b), *j);
            }
        }
    }
    if (*a == '(') {
        return eval(a+1, b-1);
    }
    return s2i(a, b);
}

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