Pagini recente » Cod sursa (job #273015) | Cod sursa (job #614780) | Cod sursa (job #2277555) | Cod sursa (job #2227789) | Cod sursa (job #1207383)
#include <fstream>
#include <cstring>
#define DIM 100010
using namespace std;
char V[DIM];
char S[DIM];
int O[DIM];
int stack[DIM];
char p[256];
int x, y, i, dS, dO, k;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
int main() {
p['+'] = p['-'] = 1;
p['*'] = p['/'] = 2;
fin>>V;
for (i=0;V[i]!=0;i++) {
if (V[i] == '(') {
S[++dS] = '(';
continue;
}
if (V[i] == ')') {
while (S[dS] != '(') {
O[++dO] = -S[dS];
dS--;
}
dS--;
continue;
}
if (V[i] >= '0' && V[i] <= '9') {
dO++;
O[dO] = 0;
while (V[i] >= '0' && V[i] <= '9') {
O[dO] = O[dO] * 10 + V[i]-'0';
i++;
}
i--;
continue;
}
if (strchr("+-*/",V[i])) {
while (dS!=0 && S[dS]!='(' && p[ V[i] ] <= p[ S[dS] ]) {
O[++dO] = -S[dS--];
}
S[++dS] = V[i];
}
}
while (dS) {
O[++dO] = -S[dS];
dS--;
}
for (i=1;i<=dO;i++) {
if (O[i] >= 0) {
stack[++k] = O[i];
} else {
x = stack[k-1];
y = stack[k];
k--;
if (-O[i] == '+')
stack[k] = x+y;
if (-O[i] == '-')
stack[k] = x-y;
if (-O[i] == '*')
stack[k] = x*y;
if (-O[i] == '/')
stack[k] = x/y;
}
}
fout<<stack[1];
return 0;
}