Pagini recente » Monitorul de evaluare | Cod sursa (job #630643) | Cod sursa (job #2226438) | Cod sursa (job #3256851) | Cod sursa (job #153403)
Cod sursa(job #153403)
#include<fstream.h>
#include<string.h>
char a[100010],c,b[100010];
long vb1,i,nr,n,vb,vx,par[100010],vp,nrx[100010],vn,j;
long x[100010];
ifstream f("evaluare.in");
ofstream g("evaluare.out");
int main()
{
f>>a;
i=0;
while(i<strlen(a))
{
if(a[i]>='0' && a[i]<='9')
{
x[vx]=0;
while(a[i]>='0' && a[i]<='9')
{
x[vx]=x[vx]*10+a[i]-'0';
i++;
}
i--;
vx++;
}
else
{
if(a[i]=='+')
{
while(b[vb-1]=='*' || b[vb-1]=='/')
{
while(b[vb-1]=='*')
{
x[vx-2]=x[vx-2]*x[vx-1];
vx--;
vb--;
}
while(b[vb-1]=='/')
{
x[vx-2]=x[vx-2]/x[vx-1];
vb--;
vx--;
}
}
b[vb]='+';
vb++;
}
else
if(a[i]=='-')
{
while(b[vb-1]=='*' || b[vb-1]=='/')
{
while(b[vb-1]=='*')
{
x[vx-2]=x[vx-2]*x[vx-1];
vx--;
vb--;
}
while(b[vb-1]=='/')
{
x[vx-2]=x[vx-1]/x[vx-2];
vb--;
vx--;
}
}
b[vb]='-';
vb++;
}
else
if(a[i]=='*')
{
b[vb]='*';
vb++;
}
else
if(a[i]=='/')
{
b[vb]='/';
vb++;
}
else
if(a[i]=='(')
{
b[vb]='(';
par[vp]=vb;
nrx[vn]=vx;
vn++;
vp++;
vb++;
}
else
if(a[i]==')')
{
vb1=vb;
for(j=vb1-1;b[j]!='(';j--)
{
switch(b[j])
{
case '+':x[nrx[vn-1]]+=x[nrx[vn-1]+vb1-j];break;
case '-':x[nrx[vn-1]]-=x[nrx[vn-1]+vb1-j];break;
case '*':x[nrx[vn-1]]*=x[nrx[vn-1]+vb1-j];break;
case '/':if(x[nrx[vn-1]+vb1-j]!=0)
x[nrx[vn-1]]/=x[nrx[vn-1]+vb1-j];break;
}
vx--;
vb--;
}
vn--;
vb--;
vp--;
}
}
i++; }
while(vb>0)
{
switch(b[vb-1])
{
case '+':x[vx-2]+=x[vx-1];break;
case '-':x[vx-2]-=x[vx-1];break;
case '*':x[vx-2]*=x[vx-1];break;
case '/':if(x[vx-1]!=0)
x[vx-2]/=x[vx-1];
break;
}
vx--;
vb--;
}
g<<x[0]<<'\n';
g.close();
return 0;
}