Pagini recente » Cod sursa (job #2999008) | Cod sursa (job #145252) | Cod sursa (job #3238446) | Cod sursa (job #658167) | Cod sursa (job #1557904)
#include<cstdio>
#include<cstring>
using namespace std;
char v[100001];
int c,n;
int eval();
int adun();
int inmult();
int eval()
{int k=0,rez=0;
for(c=c+1;c<n&&v[c]!=')';c++)
{if(v[c]=='(')
rez=eval();
else
if(v[c]>='0'&&v[c]<='9')
{while(v[c]>='0'&&v[c]<='9')
{k=k*10+v[c]-'0';
c++;
}
rez=k;
c--;
}
else
if(v[c]=='+')
rez+=adun();
else
if(v[c]=='-')
rez-=adun();
else
if(v[c]=='*')
rez*=inmult();
else
rez/=inmult();
}
if(v[c+1]==')'||c+1>=n||v[c+1]=='+'||v[c+1]=='-')
return rez;
else
if(v[c+1]=='*')
{c++;
return rez*inmult();
}
else
{c++;
return rez/inmult();
}
}
int adun()
{int k=0;
c++;
if(v[c]>='0'&&v[c]<='9')
{while(v[c]>='0'&&v[c]<='9')
{k=k*10+v[c]-'0';
c++;
}
if(c==n||v[c]==')')
{c--;
return k;
}
else
if(v[c]=='*')
return k*inmult();
else
if(v[c]=='/')
return k/inmult();
else
if(v[c]=='+'||v[c]=='-')
{c--;
return k;
}
}
else
return eval();
}
int inmult()
{int k=0;
c++;
if(v[c]>='0'&&v[c]<='9')
{while(v[c]>='0'&&v[c]<='9')
{k=k*10+v[c]-'0';
c++;
}
c--;
return k;
}
else
return eval();
}
int main ()
{freopen ("evaluare.in","r",stdin);
freopen ("evaluare.out","w",stdout);
scanf("%s",&v);
n=strlen(v);
c=-1;
printf("%d",eval());
return 0;
}