Pagini recente » Cod sursa (job #2674725) | Cod sursa (job #412908) | Cod sursa (job #482303) | Cod sursa (job #2171954) | Cod sursa (job #1778112)
#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;
}