Pagini recente » Cod sursa (job #2185721) | Cod sursa (job #2516249) | Cod sursa (job #1995346) | Cod sursa (job #3135244) | Cod sursa (job #1778515)
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
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;
}
bool contains(string s, char c) {
return find(s.begin(), s.end(), c) != s.end();
}
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 && contains(op[j], *i)) {
return operatie(eval(a, i), eval(i+1, b), *i);
}
}
}
if (*a == '(') {
return eval(a+1, b-1);
}
return s2i(a, b);
}
int main() {
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
string s;
getline(fin, s);
fout<<eval(s.begin(), s.end());
return 0;
}