Pagini recente » Cod sursa (job #951978) | Cod sursa (job #935715) | Cod sursa (job #216063) | Cod sursa (job #2064308) | Cod sursa (job #1557801)
#include<cstdio>
#include<cstring>
char s[100002];
int i=-1,j,n,m,pp;
int eval1();
int eval2();
int main ()
{
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
gets(s);
n=strlen(s);
for(i=n;i>=1;i--)
s[i]=s[i-1];
s[0]='+';
n++;
int nr=0;
int sum=0;
for(i=0;i<n;)
{
while(s[i]>='0'&&s[i]<='9')
{
nr=nr*10+s[i]-'0';
i++;
}
if(s[i]=='+')
{
if(pp==0)
sum+=nr;
else
{
sum-=nr;
pp=0;
}
nr=0;
i++;
}
if(s[i]=='-')
{
if(pp==0)
{
sum+=nr;
pp=1;
}
else
sum-=nr;
nr=0;
i++;
}
if(s[i]=='*')
nr*=eval1();
if(s[i]=='/')
nr/=eval1();
if(s[i]=='(')
{
nr=eval2();
i++;
}
}
if(pp==0)
sum+=nr;
else
sum-=nr;
printf("%d",sum);
return 0;
}
int eval1()
{
i++;
int nr=0;
while(i<n&&s[i]>='0'&&s[i]<='9')
{
nr=nr*10+s[i]-'0';
i++;
}
if(i==n||s[i]=='-'||s[i]=='+'||s[i]=='*'||s[i]=='/'||s[i]==')')
return nr;
if(s[i]=='(')
return eval2();
}
int eval2()
{
if(s[i]=='(')
s[i]='+';
int sum=0;
int nr=0;
if(s[i]=='(')
{
nr=eval2();
i++;
}
while(i<n&&s[i]>='0'&&s[i]<='9')
{
nr=nr*10+s[i]-'0';
i++;
}
while(i<n&&(s[i]=='+'||s[i]=='-'))
{
if(i<n&&s[i]=='+')
{
sum+=nr;
nr=0;
i++;
sum+=eval2();
}
if(i<n&&s[i]=='-')
{
sum+=nr;
nr=0;
i++;
sum-=eval2();
}
}
while(s[i]=='/'||s[i]=='*')
{
if(i<n&&s[i]=='/')
nr/=eval1();
if(i<n&&s[i]=='*')
nr*=eval1();
}
if(sum==0&&nr!=0)
sum=nr;
return sum;
}