Pagini recente » Istoria paginii runda/joaca_3 | Cod sursa (job #1902272) | Cod sursa (job #1145963) | Cod sursa (job #1247798) | Cod sursa (job #995302)
Cod sursa(job #995302)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
int n,v[100005],x,ad=0,k=0;
char a[100005],sign[100005],sgn;
int Solve()
{ int sol=0,last=0;
for(;;)
{ if (v[x]==-1)
{ad++;
if (sign[x]=='+') {x++; last=Solve(); sol+=last; }
else
if (sign[x]=='-') {x++; last=Solve()*(-1); sol+=last; }
else
if (sign[x]=='*') {sol-=last; x++; last*=Solve(); sol+=last; }
else
if (sign[x]=='/') {sol-=last; x++; last/=Solve(); sol+=last; }
ad--;
}
else if(v[x]==-2 || x>k) {x++; return sol;}
else
{
if (sign[x]=='+') {last=v[x]; sol+=last; }
else
if (sign[x]=='-') {last=v[x]*(-1); sol+=last; }
else
if (sign[x]=='*') {if (v[x]==45) cout<<last; sol-=last; last*=v[x]; sol+=last; }
else
if (sign[x]=='/') {sol-=last; last/=v[x]; sol+=last; }
x++;
}
}
}
int main()
{ int i,nr=0,len;
f.getline(a,100005);
len=strlen(a);
sgn='+';
for(i=0;i<len;i++)
{ if (a[i]=='(') {k++; sign[k]=sgn; sgn='+'; v[k]=-1;}
else
if (a[i]==')') {k++; v[k]=-2;}
else
if (a[i]>=48 && a[i]<=57)
{ nr=nr*10+(a[i]-48);
if (a[i+1]<48 || a[i+1]>57) {k++; sign[k]=sgn; v[k]=nr; nr=0;}
}
else sgn=a[i];
}
/* for(i=1;i<=k;i++)
cout<<sign[i]<<" "<<v[i]<<"\n";*/
x=1; ad=0;
g<<Solve();
return 0;
}