Pagini recente » Cod sursa (job #597446) | Cod sursa (job #2972550) | Cod sursa (job #3287027) | Cod sursa (job #1592185) | Cod sursa (job #2157513)
#include <iostream>
#include <fstream>
#include <stack>
#include <string.h>
using namespace std;
ifstream in("evaluare.in");
ofstream out("evaluare.out");
int n, pr[256];
char s[100005];
stack<char> op;
stack<int> var;
void calc() {
char o = op.top(); op.pop();
int b = var.top(); var.pop();
int a = var.top(); var.pop();
int r = 0;
if (o == '+') {
r = a + b;
} else if (o == '-') {
r = a - b;
} else if (o == '*') {
r = a * b;
} else {
r = a / b;
}
var.push(r);
}
int next_int(int &i) {
int nr = 0;
while (i < n && (s[i] >= '0' && s[i] <= '9')) {
nr = nr * 10 + (s[i] - '0');
i++;
}
if (i == n) i++;
return nr;
}
int main()
{
pr['+'] = 1;
pr['-'] = 1;
pr['*'] = 2;
pr['/'] = 2;
pr['('] = 0;
pr[')'] = 3;
in >> s;
n = strlen(s);
int i = 0;
while (i < n) {
char c = s[i];
if (c >= '0' && c <= '9') {
var.push(next_int(i));
i--;
} else if (c == '(') {
op.push(c);
} else if (c == ')') {
while (op.top() != '(') calc();
op.pop();
} else {
if (op.size()) if (pr[c] <= pr[op.top()]) calc();
op.push(c);
}
i++;
}
while (op.size()) calc();
out << var.top();
return 0;
}