Pagini recente » Cod sursa (job #2199071) | Cod sursa (job #2796350) | Cod sursa (job #2806456) | Cod sursa (job #1796473) | Cod sursa (job #2204666)
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char tmp[100005];
int paranteze[100005];
void parantezare()
{
int local[100005], l = 0;
for (int i=0; i<strlen(tmp); i++)
{
if (tmp[i] == '(')
local[l++] = i;
else if (tmp[i] == ')')
{
paranteze[i] = local[l-1];
paranteze[local[l-1]] = i;
l--;
}
}
}
int eval(int st = 0, int dr = strlen(tmp)-1)
{
if (tmp[st] == '(' && paranteze[st] == dr)
return eval(st+1, dr-1);
for (int i=dr; i>=st; i--)
{
if (tmp[i] == ')')
i = paranteze[i];
else if (tmp[i] == '+')
return eval(st, i-1) + eval(i+1, dr);
else if (tmp[i] == '-')
return eval(st, i-1) - eval(i+1, dr);
}
for (int i=dr; i>=st; i--)
{
if (tmp[i] == ')')
i = paranteze[i];
else if (tmp[i] == '*')
return eval(st, i-1) * eval(i+1, dr);
else if (tmp[i] == '/')
return eval(st, i-1) / eval(i+1, dr);
}
char numar[10];
strncpy(numar, tmp+st, dr-st+1);
numar[dr-st+1] = '\0';
return atoi(numar);
}
int main()
{
freopen("evaluare.in", "r", stdin);
freopen("evaluare.out", "w", stdout);
gets(tmp);
parantezare();
printf("%d", eval());
return 0;
}