Pagini recente » Cod sursa (job #483897) | Cod sursa (job #2973138) | Cod sursa (job #3256005) | Cod sursa (job #1647829) | Cod sursa (job #1350068)
#include<stdio.h>
#include<string.h>
using namespace std;
char oper[2][4] = {"+-", "*/"};
char s[100010];
int i, n;
int next(int);
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(0);
}
int x = 0;
while(strchr("0123456789", s[i]) && i < n) {
x = x * 10 + s[i] - '0';
++i;
}
return x;
}
int next(int type)
{
int rez = (type == 1) ? getElem() : next(type+1);
if(i == n) return rez;
char op = s[i]; ++i;
while(strchr(oper[type], op)) {
int val = (type == 0) ? next(1) : getElem();
rez = apply(op, rez, val);
if(i == n) {
return rez;
}
op = s[i]; ++i;
}
if(op != ')') {
--i;
}
return rez;
}
int main() {
freopen("evaluare.in", "r", stdin);
freopen("evaluare.out", "w", stdout);
scanf("%s", s);
n = strlen(s);
printf("%d ", next(0));
return 0;
}