Pagini recente » Cod sursa (job #1200748) | Cod sursa (job #451017) | Cod sursa (job #434444) | Cod sursa (job #1444961) | Cod sursa (job #2855145)
#include <fstream>
#include <stack>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char c[100001];
stack<int> nr;
stack<char> op;
int val;
void print() {
stack<int> nr1 = nr;
stack<char> op1 = op;
fout << "nr: ";
while (!nr1.empty()) {
fout << nr1.top() << " ";
nr1.pop();
}
fout << "\nop: ";
while (!op1.empty()) {
fout << op1.top() << " ";
op1.pop();
}
fout << "\n" << endl;
}
int eval(int nr1, int nr2, char c) {
if (c == '+') {
return (nr2+nr1);
} else if (c == '-') {
return (nr2-nr1);
} else if (c == '*') {
return (nr2*nr1);
} else {
return (nr2/nr1);
}
}
int main()
{
fin.getline(c, 100001);
for (int i = 0; c[i]; i++) {
//fout << c[i] << endl;
if (c[i] == '(') {
op.push(c[i]);
} else if (c[i] == '*' || c[i] == '/') {
op.push(c[i]);
} else if (c[i] == '+' || c[i] == '-') {
while (!op.empty()) {
if (op.top() != '*' && op.top() != '/') {
break;
}
int nr1 = nr.top(); nr.pop();
int nr2 = nr.top(); nr.pop();
nr.push(eval(nr1, nr2, op.top()));
op.pop();
}
op.push(c[i]);
} else if (c[i] == ')') {
while (!op.empty()) {
if (op.top() == '(') {
break;
}
int nr1 = nr.top(); nr.pop();
int nr2 = nr.top(); nr.pop();
nr.push(eval(nr1, nr2, op.top()));
op.pop();
}
op.pop();
} else {
val = val*10 + c[i] - '0';
if (!isdigit(c[i+1])) {
nr.push(val);
val = 0;
}
}
//print();
}
while (!op.empty()) {
int nr1 = nr.top(); nr.pop();
int nr2 = nr.top(); nr.pop();
nr.push(eval(nr1, nr2, op.top()));
op.pop();
}
fout << nr.top();
return 0;
}