Pagini recente » Cod sursa (job #364752) | Cod sursa (job #2456097) | Cod sursa (job #1030036) | Cod sursa (job #137501) | Cod sursa (job #3196334)
// 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;
bool isOperator(const char& ch) {
return ch == '+' || ch == '-'
|| ch == '/' || ch == '*';
}
bool isPriority(const char& opA, const char& opB) {
if (opA == '*' || opA == '/') {
return true;
} else if (opA == '+' || opA == '-') {
if (opB == '+' || opB == '-') {
return true;
}
}
return false;
}
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.empty() && op.top() != '(') {
newEc += op.top();
newEc += ' ';
op.pop();
}
op.pop();
} else if (isOperator(ec[i])) {
while (!op.empty() && isPriority(op.top(), ec[i])) {
newEc += op.top();
newEc += ' ';
op.pop();
}
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;
}