Cod sursa(job #1778112)

Utilizator medicinedoctoralexandru medicinedoctor Data 13 octombrie 2016 14:55:40
Problema Evaluarea unei expresii Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 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 eval(string s) {
    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]=='+') {
            return eval(s.substr(0, i)) + eval(s.substr(i+1, s.size()-i-1));
        }
        else if (p==0 && s[i]=='-') {
            return eval(s.substr(0, i)) - eval(s.substr(i+1, s.size()-i-1));
        }
    }
    for (int i = 0; i < s.size(); i++) {
        if (s[i] == '(') {
            p++;
        } else if (s[i] == ')') {
            p--;
        }
        else if (p==0 && s[i]=='*') {
            return eval(s.substr(0, i)) * eval(s.substr(i+1, s.size()-i-1));
        }
        else if (p==0 && s[i]=='/') {
            return eval(s.substr(0, i)) / eval(s.substr(i+1, s.size()-i-1));
        }
    }
    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;
}