Pagini recente » Cod sursa (job #2097790) | Cod sursa (job #1865321) | Cod sursa (job #1899202) | Cod sursa (job #259626) | Cod sursa (job #2338339)
#include <iostream>
#include <stdio.h>
#include <cstring>
#define adun -3
#define scad -4
#define inm -5
#define imp -6
using namespace std;
FILE *f,*g;
char v[100002];
int st[100002];
int lg,s;
void read()
{
fscanf(f,"%s",&v);
lg=strlen(v);
}
void solve()
{ int vf=0,nr,s2,j,jcop,vffake,icop;
for(int i=0; i<lg; i++)
{
if(v[i]=='(')
st[++vf]=-1;
else if(v[i]>='0' && v[i]<='9')
{ nr=0;
while(v[i]>='0' && v[i]<='9')
{
nr=nr*10+v[i]-'0';
i++;
}
st[++vf]=nr;
i--;
}
else if(v[i]=='+')
st[++vf]=adun;
else if(v[i]=='-')
st[++vf]=scad;
else if(v[i]=='*')
st[++vf]=inm;
else if(v[i]=='/')
st[++vf]=imp;
else
{
for(j=vf; st[j]!=-1; j--){}
vffake=j;
s=st[++j];
j++; //aici tre sa vad daca ii cv de forma (-21+3)
for( ; j<=vf; j+=2)
{
if(st[j]==adun && (st[j+2]!=inm && st[j+2]!=imp))
s+=st[j+1];
else if(st[j]==scad && (st[j+2]!=inm && st[j+2]!=imp))
s-=st[j+1];
else
{ jcop=j;
s2=st[j+1];
j+=2;
while(st[j]==inm || st[j]==imp)
{
if(st[j]==inm)
s2*=st[j+1];
else
s2/=st[j+1];
j+=2;
}
if(jcop==scad)
s-=s2;
else
s+=s2;
}
}
vf=vffake;
st[vffake]=s;
}
}
s=0;
for(int i=1; i<=vf; i++)
{
if(st[i]==adun && (st[i+2]!=inm && st[i+1]!=imp))
s+=st[i+1];
else if(st[i]==scad && (st[i+2]!=inm && st[i+2]!=imp))
s-=st[i+1];
else
{ icop=i;
s2=st[i];
i++;
while(st[i]==inm || st[i]==imp)
{
if(st[i]==inm)
s2*=st[i+1];
else
s2/=st[i+1];
i+=2;
}
if(icop==scad)
s-=s2;
else
s+=s2;
}
}
}
void write()
{
fprintf(g,"%d",s);
cout<<s;
}
int main()
{
f=fopen("evaluare.in","r");
g=fopen("evaluare.out","w");
read();
solve();
write();
fclose(f);
fclose(g);
return 0;
}