Pagini recente » Cod sursa (job #82977) | Cod sursa (job #1488663) | Cod sursa (job #2928203) | Cod sursa (job #2815901) | Cod sursa (job #1349766)
#include<stdio.h>
#include<stack>
#include<string.h>
using namespace std;
char s[100010];
stack<long> st;
void eval(long type) {
if(type == 0) {
long val2 = st.top();
st.pop();
long op = st.top();
st.pop();
long val1 = st.top();
st.pop();
switch(op)
{
case '*': val1 *= val2; break;
case '/': val1 /= val2; break;
}
st.push(val1);
} else if(type == 1) {
long op, val1, val2;
val2 = st.top();
st.pop();
while((op = st.top()) != '(') {
st.pop();
val1 = st.top();
st.pop();
switch(op)
{
case '+': val2 += val1; break;
case '-': val2 = val1 - val2; break;
}
}
st.pop();
st.push(val2);
} else {
long op, val1, val2;
val2 = st.top();
st.pop();
while(!st.empty()) {
op = st.top();
st.pop();
val1 = st.top();
st.pop();
switch(op)
{
case '+': val2 += val1; break;
case '-': val2 = val1 - val2; break;
case '*': val2 *= val1; break;
case '/': val2 = val1 / val2;
}
}
st.push(val2);
}
}
long main() {
freopen("evaluare.in", "r", stdin);
freopen("evaluare.out", "w", stdout);
scanf("%s", s);
long i = 0, n = strlen(s);
char x = 0;
while(i < n) {
char c = s[i];
if(strchr("0123456789", c)) {
long nr = c - '0';
++i;
c = s[i];
while(strchr("0123456789", c) && i < n) {
nr = nr * 10 + c - '0';
++i;
c = s[i];
}
--i;
st.push(nr);
if(x == '*' || x == '/') {
eval(0);
}
} else {
x = c;
if(c == ')') {
eval(1);
} else {
st.push(c);
}
}
++i;
}
eval(2);
printf("%d ", st.top());
return 0;
}