Pagini recente » Cod sursa (job #1986979) | Cod sursa (job #671131) | Autentificare | Cod sursa (job #206591) | Cod sursa (job #713693)
Cod sursa(job #713693)
#include <cstdio>
#include <stack>
#include <cstring>
#define nMax 100010
using namespace std;
stack <int> a;
char expresie[nMax];
int n;
int rez(int panaUnde, int deUnde)
{
int paranteze = 0;
for (int i = deUnde; i >= panaUnde; -- i){
if (expresie[i] == ')'){
paranteze ++;
int incepe = i;
i --;
while (paranteze){
if (expresie [i] == ')')
paranteze ++;
if (expresie [i] == '(')
paranteze --;
i--;
}
if (i < panaUnde && incepe == deUnde){
return rez (panaUnde + 1, deUnde - 1);
}
}
if (expresie[i] == '('){
continue;
}
if (expresie[i] == '+'){
return rez (panaUnde, i - 1) + rez (i + 1, deUnde);
}
if (expresie[i] == '-'){
return rez (panaUnde, i - 1) - rez (i + 1, deUnde);
}
}
for (int i = deUnde; i >= panaUnde ; -- i){
if (expresie[i] == ')'){
paranteze ++;
int incepe = i;
i --;
while (paranteze ){
if (expresie [i] == ')')
paranteze ++;
if (expresie [i] == '(')
paranteze --;
i--;
}
if (i < panaUnde && incepe == deUnde){
return rez (panaUnde + 1, deUnde - 1);
}
}
if (expresie[i] == '('){
paranteze --;
continue;
}
if (expresie[i] == '*'){
return rez (panaUnde, i - 1) * rez (i + 1, deUnde);
}
if (expresie[i] == '/'){
return rez (panaUnde, i - 1) / rez (i + 1, deUnde);
}
}
int s = 0;
int zece = 1;
for (int i = deUnde; i >= panaUnde; -- i){
if (expresie[i] >= '0' && expresie[i] <= '9'){
s += (expresie[i] - '0') * zece;
zece *= 10;
}
}
return s;
}
int main()
{
freopen ("evaluare.in", "r", stdin);
freopen ("evaluare.out", "w", stdout);
gets (expresie);
n = strlen (expresie);
printf ("%d\n", rez(0, n - 1));
return 0;
}