Pagini recente » Cod sursa (job #2130098) | Cod sursa (job #2593429) | Cod sursa (job #816698) | Cod sursa (job #1104455) | Cod sursa (job #683169)
Cod sursa(job #683169)
#include<stdio.h>
#include<string.h>
#include<ctype.h>
int st[100001],v[100001],k=0,vf=0,st1[100001],vf1=0,i,m,a;
char s[100001];
int main()
{
FILE *f=fopen("evaluare.in","r");
FILE *g=fopen("evaluare.out","w");
fscanf(f,"%s",s);
for(i=0;i<strlen(s);i++)
{
if(isdigit(s[i]))
{
m=0;
while(i<strlen(s)&& isdigit(s[i]))
{
m=m*10+(s[i]-'0');
i++;
}
i--;
v[++k]=m;
}
if(s[i]=='(')st[++vf]=-5;
if(s[i]=='+'||s[i]=='-')
{
while((vf>0) && (st[vf]==-1||st[vf]==-4||st[vf]==-2||st[vf]==-3))
{
v[++k]=st[vf];
vf--;
}
if(s[i]=='+')a=-2;
else a=-3;
st[++vf]=a;
}
if(s[i]=='*'){while(vf>0&&(st[vf]==-1||st[vf]==-4)){v[++k]=st[vf];vf--;}st[++vf]=-1;}
if(s[i]=='/'){while(vf>0&&(st[vf]==-1||st[vf]==-4)){v[++k]=st[vf];vf--;}st[++vf]=-4;}
if(s[i]==')')
{
while(vf>0 && st[vf]!=-5)
{
v[++k]=st[vf];
vf--;
}
vf--;
}
}
for(i=vf;i>=1;i--)v[++k]=st[i];
if(st[0]<0)v[++k]=st[i];
for(i=1;i<=k;i++)
{
if(v[i]>=0)st1[++vf1]=v[i];
else
{
if(v[i]==-1){m=st1[vf1]*st1[vf1-1];vf1--;st1[vf1]=m;}
if(v[i]==-2){m=st1[vf1]+st1[vf1-1];vf1--;st1[vf1]=m;}
if(v[i]==-3){m=st1[vf1-1]-st1[vf1];vf1--;st1[vf1]=m;}
if(v[i]==-4){m=st1[vf1-1]/st1[vf1];vf1--;st1[vf1]=m;}
}
}
fprintf(g,"%d",st1[vf1]);
fclose(f);
fclose(g);
}