Pagini recente » Cod sursa (job #2374773) | Cod sursa (job #485330) | Cod sursa (job #2426924) | Cod sursa (job #2832292) | Cod sursa (job #1557386)
#include<cstdio>
#include<cstring>
char s[100002];
int i=-1,j,n,m;
int eval();
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++;
i=-1;
printf("%d",eval());
return 0;
}
int eval()
{
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;
sum+=eval();
}
if(i<n&&s[i]=='-')
{
sum+=nr;
nr=0;
sum-=eval();
}
}
while(s[i]=='/'||s[i]=='*')
{
if(i<n&&s[i]=='/')
nr/=eval1();
if(i<n&&s[i]=='*')
nr*=eval1();
if(s[i]==')')
i++;
}
if(sum==0&&nr!=0)
sum=nr;
return sum;
}
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]=='/')
return nr;
if(s[i]=='(')
return eval2();
}
int eval2()
{
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;
sum+=eval2();
}
if(i<n&&s[i]=='-')
{
sum+=nr;
nr=0;
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;
}