Pagini recente » Cod sursa (job #1085165) | Cod sursa (job #444930) | Cod sursa (job #1726249) | Cod sursa (job #1897438) | Cod sursa (job #193374)
Cod sursa(job #193374)
#include <cstdio>
#include <string>
#define IN "evaluare.in"
#define OUT "evaluare.out"
#define L_MAX 110000
using namespace std;
char sir[L_MAX];
int last[L_MAX],rez[L_MAX],p,l,nrp;
void scan()
{
freopen(IN, "r",stdin);
freopen(OUT, "w",stdout);
gets(sir);
l=strlen(sir);
}
inline int calc(int y)
{
int semn;
while(sir[p]=='*' || sir[p]=='/')
{
if(sir[p]=='*')
semn=1;
else
semn=2;
int x=0;
++p;
while(sir[p]<='9' && sir[p]>='0' && p<l)
{
x=x*10+sir[p]-'0';
++p;
}
if(semn==1)
y*=x;
else
y/=x;
}
return y;
}
void read_nr()
{
int x=0;
while(sir[p]<='9' && sir[p]>='0' && p<l)
{
x=x*10+sir[p]-'0';
++p;
}
if(sir[p]=='*' || sir[p]=='/')
x=calc(x);
if(last[nrp]==1)
rez[nrp]=rez[nrp]+x;
if(last[nrp]==2)
rez[nrp]=rez[nrp]-x;
if(last[nrp]==3)
rez[nrp]=rez[nrp]*x;
if(last[nrp]==4)
rez[nrp]=rez[nrp]/x;
if(last[nrp]==0)
rez[nrp]=x;
}
void solve()
{
for(p=0;p<l;++p)
{
if(sir[p]<='9' && sir[p]>='0')
read_nr();
if(sir[p]=='(' )
++nrp;
if(sir[p]==')')
{
--nrp;
if(last[nrp]==1)
rez[nrp]=rez[nrp]+rez[nrp+1];
if(last[nrp]==2)
rez[nrp]=rez[nrp]-rez[nrp+1];
if(last[nrp]==3)
rez[nrp]=rez[nrp]*rez[nrp+1];
if(last[nrp]==4)
rez[nrp]=rez[nrp]/rez[nrp+1];
if(last[nrp]==0)
rez[nrp]=rez[nrp+1];
}
if(sir[p]=='+')
last[nrp]=1;
else
if(sir[p]=='-')
last[nrp]=2;
else
if(sir[p]=='*')
last[nrp]=3;
else
if(sir[p]=='/')
last[nrp]=4;
else
last[nrp]=0;
}
printf("%d\n", rez[nrp]);
}
int main()
{
scan();
solve();
return 0;
}