Pagini recente » Cod sursa (job #2855112) | Cod sursa (job #1138821) | Cod sursa (job #2171563) | Cod sursa (job #745581) | Cod sursa (job #1349857)
#include<stdio.h>
#include<stack>
#include<string.h>
using namespace std;
char s[100010];
int i, n;
int next();
int apply(char op, int val1, int val2)
{
switch(op) {
case '*' : val1 *= val2; break;
case '/' : val1 /= val2; break;
case '+' : val1 += val2; break;
case '-' : val1 -= val2; break;
}
return val1;
}
int getElem()
{
if(s[i] == '(') {
++i;
return next();
}
int x = 0;
while(strchr("0123456789", s[i]) && i < n) {
x = x * 10 + s[i] - '0';
++i;
}
return x;
}
int next()
{
int rez = getElem();
if(i == n) return rez;
char op = s[i]; ++i;
while(op == '*' || op == '/') {
int val = getElem();
rez = apply(op, rez, val);
if(i == n) {
return rez;
}
op = s[i]; ++i;
}
if(op == ')' || i == n) return rez;
return apply(op, rez, next());
}
int main() {
freopen("evaluare.in", "r", stdin);
freopen("evaluare.out", "w", stdout);
scanf("%s", s);
n = strlen(s);
printf("%d ", next());
return 0;
}