Pagini recente » Cod sursa (job #2661774) | Cod sursa (job #1028557) | Cod sursa (job #2527748) | Cod sursa (job #1214582) | Cod sursa (job #2324832)
#include <fstream>
using namespace std;
ifstream cin ("evaluare.in");
ofstream cout ("evaluare.out");
int i;
string s;
string priority[4] = {"-+", "/*", "^", ""}; // aparent pot sa bag si ^
int op(int a, int b, char c) {
if(c == '-')
return a - b;
if(c == '+')
return a + b;
if(c == '*')
return a * b;
return a / b;
}
bool f(string a, char c) {
for(int j = 0; j < a.size(); j++) {
if(a[j] == c)
return 1;
}
return 0;
}
int eval(int p) {
int nr, nr2;
if(p == 2) {
if(s[i] == '(')
i++, nr = eval(0), i++;
else {
nr = 0;
while('0' <= s[i] && s[i] <= '9' && i < s.size())
nr = nr * 10 + s[i] - '0', i++;
}
} else {
for(nr = eval(p + 1); f(priority[p], s[i]) && i < s.size(); nr = nr2)
nr2 = op(nr, eval(p + 1), s[i++]);
}
return nr;
}
int main() {
cin >> s;
cout << eval(0);
return 0;
}