Pagini recente » Cod sursa (job #413113) | Cod sursa (job #821139) | Cod sursa (job #429847) | Cod sursa (job #308513) | Cod sursa (job #3196173)
// Utilizam stiva si inverse polish notation
#include <bits/stdc++.h>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
string ec;
string newEc;
stack<char> op;
stack<long long> nr;
int main() {
getline(fin,ec);
for (int i = 0; i < ec.size(); i++) {
if (ec[i] >= '0' && ec[i] <= '9') {
while (ec[i] >= '0' && ec[i] <= '9') {
newEc += ec[i];
i++;
}
newEc += ' ';
}
if (ec[i] == '(') {
op.push(ec[i]);
} else if (ec[i] == ')') {
while (op.top() != '(') {
newEc += op.top();
newEc += ' ';
op.pop();
}
op.pop();
}
if (ec[i] == '-' || ec[i] == '+') {
while (!op.empty() && (op.top() == '*' || op.top() == '/')) {
newEc += op.top();
newEc += ' ';
op.pop();
}
op.push(ec[i]);
} else if (ec[i] == '*' || ec[i] == '/'){
op.push(ec[i]);
}
}
while (!op.empty()) {
newEc += op.top();
newEc += ' ';
op.pop();
}
// fout << newEc;
for (int i = 0; i < newEc.size(); i++) {
if (newEc[i] >= '0' && newEc[i] <= '9') {
int constanta = newEc[i] - '0';
i++;
while (newEc[i] >= '0' && newEc[i] <= '9') {
constanta *= 10;
constanta += newEc[i] - '0';
i++;
}
nr.push(constanta);
}
if (newEc[i] == '-') {
long long mem = nr.top();
nr.pop();
mem = nr.top() - mem;
nr.pop();
nr.push(mem);
} else if (newEc[i] == '+') {
long long mem = nr.top();
nr.pop();
mem += nr.top();
nr.pop();
nr.push(mem);
} else if (newEc[i] == '*') {
long long mem = nr.top();
nr.pop();
mem *= nr.top();
nr.pop();
nr.push(mem);
} else if (newEc[i] == '/') {
long long mem = nr.top();
nr.pop();
mem = nr.top() / mem;
nr.pop();
nr.push(mem);
}
}
fout << nr.top();
return 0;
}