Pagini recente » Cod sursa (job #2391531) | Cod sursa (job #1191256) | Cod sursa (job #132969) | Cod sursa (job #1174328) | Cod sursa (job #2111640)
#include <cstdio>
#include <string.h>
using namespace std;
char s[100005];
void elimin_paranteze(int &st, int &dr)
{
while(s[st]=='(' && s[dr]==')')
{
st++;
dr--;
}
}
int caut(char x, char y, int st, int dr)
{
int nr=0;
for(int i=dr;i>=st;i--)
{
if(s[i]==')')
nr++;
else if(s[i]=='(')
nr--;
if((s[i] == x || s[i] == y) && nr == 0)
return i;
}
return -1;
}
int int_str(int st, int dr)
{
int x=0;
for(int i=st; i<=dr; i++)
x=x*10+s[i]-'0';
return x;
}
int eval(int st, int dr)
{
elimin_paranteze(st, dr);
int p = caut('+', '-', st, dr);
if(p == -1)
{
p=caut('*', '/', st, dr);
if(p == -1)
return int_str(st, dr);
}
int v1=eval(st, p-1);
int v2=eval(p+1, dr);
switch(s[p])
{
case '+':return v1+v2;
case '-':return v1-v2;
case '*':return v1*v2;
case '/':return v1/v2;
}
}
int main()
{
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
scanf("%s", &s);
printf("%d", eval(0, strlen(s)-1));
return 0;
}