Pagini recente » Cod sursa (job #2715481) | Cod sursa (job #1759103) | Cod sursa (job #2268969) | Cod sursa (job #785222) | Cod sursa (job #635596)
Cod sursa(job #635596)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char s[100001];
int val(int left,int right)
{
int t,i;
t=0;
for (i=left; i<=right; i++) t=t*10+s[i]-'0';
return t;
}
int eval(int left,int right,int r)
{
int i,p1,p2,k;
p1=p2=k=0;
for (i=left; i<=right; i++)
if (s[i]=='(') k++; else
if (s[i]==')') k--; else
if (k==0)
{
if (s[i]=='+') return eval(left,i-1,1)+eval(1+i,right,1)*r; else
if (s[i]=='-') return eval(left,i-1,1)-eval(1+i,right,-1)*r; else
if (s[i]=='*') p1=i; else
if (s[i]=='/') p2=i;
}
if (p1>p2) return eval(left,p1-1,1)*eval(1+p1,right,1); else
if (p2>0) return eval(left,p2-1,1)/eval(1+p2,right,1); else
if (s[left]=='(') eval(left+1,right-1,1); else
return val(left,right);
}
int main()
{
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
scanf("%s",s);
printf("%d\n",eval(0,strlen(s)-1,1));
return 0;
}