Pagini recente » Cod sursa (job #2799186) | Cod sursa (job #933709) | Cod sursa (job #296649) | Cod sursa (job #2596908) | Cod sursa (job #606727)
Cod sursa(job #606727)
#include<stdio.h>
#include<string.h>
#include<ctype.h>
char s[100010],polo[100010][12],op[100010];
long st[100010];
long i,j,l,t;
long a,b,c,temp[12],max=0;
int prior(char a)
{
if(a=='+' || a=='-') return 1;
return 2;
}
void polonia()
{
t=-1;
for(i=0;i<l;++i)
{
if(isdigit(s[i]))
{
max++;
polo[max][++t]=s[i];
while(isdigit(s[i+1]))
{
i++;
polo[max][++t]=s[i];
}
t=-1;
}
else
{
if(!op[0] || s[i]=='(')
{
++op[0];
op[op[0]]=s[i];
}
else
{
if(s[i]==')')
{
while(op[op[0]]!='(')
{
polo[++max][0]=op[op[0]];
op[0]--;
}
op[0]--;
}
else
{
if(prior(s[i])==2)
{
while(op[0] && op[op[0]]!='(' && prior(op[op[0]])!=1)
{
polo[++max][0]=op[op[0]];
op[0]--;
}
op[++op[0]]=s[i];
}
else
{
while(op[0] && op[op[0]]!='(')
{
polo[++max][0]=op[op[0]];
op[0]--;
}
op[++op[0]]=s[i];
}
}
}
}
}
while(op[0])
{
polo[++max][0]=op[op[0]];
op[0]--;
}
}
void evaluare()
{
long k=0,temp;
for(i=1;i<=max;++i)
{
++k;
if(isdigit(polo[i][0]))
{
temp=strlen(polo[i]);
st[k]=0;
for(j=0;j<temp;++j)
st[k]=st[k]*10+polo[i][j]-'0';
}
else
{
if(polo[i][0]=='+')
{
k-=2;
st[k]=st[k]+st[k+1];
}
else
if(polo[i][0]=='-')
{
k-=2;
st[k]=st[k]-st[k+1];
}
else
if(polo[i][0]=='*')
{
k-=2;
st[k]=st[k]*st[k+1];
}
else
if(polo[i][0]=='/')
{
k-=2;
st[k]=st[k]/st[k+1];
}
}
}
}
int main()
{
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
gets(s);
l=strlen(s);
polonia();
evaluare();
printf("%ld",st[1]);
printf("\n");
return 0;
}