Pagini recente » Cod sursa (job #2265894) | Cod sursa (job #3176341) | Cod sursa (job #2573078) | Cod sursa (job #368356) | Cod sursa (job #793214)
Cod sursa(job #793214)
#include <cstdio>
#include <cstring>
#define N 100050
using namespace std;
char s[N];
int sum = 0;
void citire()
{
scanf("%s",s);
}
int term(int st,int dr)
{
int x = 0 ;
for (int i=st; i <=dr;i++)
{
x = x*10 + s[i]-'0';
}
return x;
}
int evalExp(int st,int dr)
{
int nrparant =0;
if (s[st] =='(' && s[dr] == ')')
return evalExp(st+1,dr-1);
for (int i = st; i <= dr;i++)
{
if (s[i] == '(')
nrparant++;
else
if (s[i] ==')')
nrparant--;
else
if (s[i] == '+' && nrparant == 0)
return evalExp(st,i-1) + evalExp(i+1,dr);
else
if (s[i] == '-' && nrparant == 0)
return evalExp(st,i-1) - evalExp(i+1,dr);
}
for (int i = st; i <= dr;i++)
{
if (s[i] == '(')
nrparant++;
else
if (s[i] ==')')
nrparant--;
else
if (s[i] == '*' && nrparant == 0)
return evalExp(st,i-1) * evalExp(i+1,dr);
else
if (s[i] == '/' && nrparant == 0)
return evalExp(st,i-1) / evalExp(i+1,dr);
}
return term(st,dr);
}
int main()
{
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
citire();
printf("%d",evalExp(0,strlen(s)-1));
return 0;
}