Pagini recente » Cod sursa (job #1329320) | Cod sursa (job #1057003) | Cod sursa (job #1858767) | Cod sursa (job #1721184) | Cod sursa (job #3203798)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char sir[100005];
int imp[300];
int care[300];
stack<char>semn;
int numar[100005];
stack<int>rez;
int main()
{
imp['+']=1;
imp['-']=1;
imp['*']=2;
imp['/']=2;
care['+']=1;
care['-']=2;
care['*']=3;
care['/']=4;
fin.getline(sir,100005);
int i;
for(i=0;sir[i];++i)
if(isdigit(sir[i]))
{
int nr=0;
while(isdigit(sir[i]))
{
nr=nr*10+(sir[i]-'0');
++i;
}
--i;
numar[++numar[0]]=nr;
}
else
if(imp[sir[i]])
{
while(!semn.empty() && imp[semn.top()]>=imp[sir[i]])
{
numar[++numar[0]]=-care[semn.top()];
semn.pop();
}
semn.push(sir[i]);
}
else
if(sir[i]=='(')
semn.push('(');
else
{
while(semn.top()!='(')
{
numar[++numar[0]]=-care[semn.top()];
semn.pop();
}
semn.pop();
}
while(!semn.empty())
{
numar[++numar[0]]=-care[semn.top()];
semn.pop();
}
for(i=1;i<=numar[0];++i)
if(numar[i]>=0)
rez.push(numar[i]);
else
{
int val1=rez.top();rez.pop();
int val2=rez.top();rez.pop();
switch(numar[i])
{
case -1:
{
rez.push(val2+val1);
break;
}
case -2:
{
rez.push(val2-val1);
break;
}
case -3:
{
rez.push(val2*val1);
break;
}
case -4:
{
rez.push(val2/val1);
break;
}
}
}
fout<<rez.top();
return 0;
}