Cod sursa(job #1778142)

Utilizator medicinedoctoralexandru medicinedoctor Data 13 octombrie 2016 15:39:13
Problema Evaluarea unei expresii Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

long s2i(string s) {
    long r = 0;
    for (int i = 0; i < s.size(); i++) {
        r = r*10 + (s[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 s) {
    char op[4] = {'+','-','*','/'};
    for (int j = 0; j < 4; j++) {
        int p = 0;
        for (int i = 0; i < s.size(); i++) {
            if (s[i] == '(') {
                p++;
            } else if (s[i] == ')') {
                p--;
            }
            else if (p==0 && s[i]==op[j]) {
                string s1 = s.substr(0, i);
                string s2 = s.substr(i+1);
                return operatie(eval(s1), eval(s2), op[j]);
            }
        }
    }
    if (s[0] == '(') {
        return eval(s.substr(1, s.size()-2));
    }
    return s2i(s);
}

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