Pagini recente » Cod sursa (job #2171914) | Cod sursa (job #2171475) | Cod sursa (job #1045311) | Monitorul de evaluare | Cod sursa (job #1412849)
#include <cstdio>
#include <cstring>
#define LMax 100001
using namespace std;
char s[LMax+1];
int i, j, n;
int Eval();
int EvaluareFactor();
int EvaluareTermen();
int EvaluareExpresie();
int main()
{
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
fgets(s,LMax,stdin);
n=strlen(s);
printf("%d\n",EvaluareExpresie());
return 0;
}
int Eval()
{
int f=0;
j=i;
while(s[j]>='0'&&s[j]<='9')
{
f=f*10+s[j]-'0';
j++;
}
return f;
}
int EvaluareFactor()
{
int f=0;
if(s[i]=='(')
{
i++;
f=EvaluareExpresie();
i++;
}
else
{
f=Eval();
i=j;
}
return f;
}
int EvaluareTermen()
{
int f=EvaluareFactor();
while(i<n&&(s[i]=='*'||s[i]=='/'))
{
if(s[i]=='*') {i++; f*=EvaluareFactor();}
else {i++; f/=EvaluareFactor();}
}
return f;
}
int EvaluareExpresie()
{
int t=EvaluareTermen();
while(i<n&&(s[i]=='+'||s[i]=='-'))
{
if(s[i]=='+') {i++; t+=EvaluareTermen();}
else {i++; t-=EvaluareTermen();}
}
return t;
}