Pagini recente » Cod sursa (job #181379) | Cod sursa (job #607749) | Cod sursa (job #1770002) | Cod sursa (job #28866) | Cod sursa (job #907593)
Cod sursa(job #907593)
#include<fstream>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
struct stiva
{
int t;
char ch;
int num;
};
stiva e[100005];
int n,p[100005];
void cit()
{
char c;
int add=0,sum;
fin.get(c);
while(c!='\n')
{
while(c==' ' && c!='\n') fin.get(c);
if(c=='\n') return;
if(c=='(') add+=10,fin.get(c);
else
if(c==')') add-=10,fin.get(c);
else
if(c=='+' || c=='-') { n++; e[n].t=1; e[n].ch=c; p[n]=1+add; fin.get(c); }
else
if(c=='*' || c=='/') { n++; e[n].t=1; e[n].ch=c; p[n]=10+add; fin.get(c); }
else
{
n++;
e[n].t=2;
sum=0;
while(c>='0' && c<='9' && c!='\n')
{
sum=sum*10+c-'0';
fin.get(c);
}
e[n].num=sum;
p[n]=1000+add;
}
}
}
int eval(int i,int j)
{
int hh,h,min;
min=999999999;
for(h=i;h<=j;h++)
if(min>=p[h])
{
min=p[h];
hh=h;
}
if(e[hh].t==1)
{
if(e[hh].ch=='+') return eval(i,hh-1)+eval(hh+1,j);
if(e[hh].ch=='-') return eval(i,hh-1)-eval(hh+1,j);
if(e[hh].ch=='*') return eval(i,hh-1)*eval(hh+1,j);
if(e[hh].ch=='/') return eval(i,hh-1)/eval(hh+1,j);
}
else
return e[hh].num;
}
int main()
{
cit();
fout<<eval(1,n);
fin.close();
fout.close();
return 0;
}