Pagini recente » Cod sursa (job #649094) | Cod sursa (job #2525185) | Cod sursa (job #842873) | Cod sursa (job #2263533) | Cod sursa (job #1836938)
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
//#define fout cout
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char c,ce;
int p,i;
stack<int> s;
vector<int> v;
int main()
{
ce='z';
while(fin>>c)
{
if(c-'0'>=0 && c-'0'<10)
{
if(ce-'0'>=0 && ce-'0'<10)
{
v[v.size()-1]*=10;
v[v.size()-1]+=c-'0';
}
else v.push_back(c-'0');
}
else
if(c!=')' && c!='(')
{
if(c=='+') p=-5;
if(c=='-') p=-4;
if(c=='*') p=-7;
if(c=='/') p=-6;
while(!s.empty() && s.top()/2<=p/2 && s.top()!=-1)
{
if(s.top()!=-1) v.push_back(s.top());
s.pop();
if(s.empty()) break;
}
s.push(p);
}
else
if(c=='(')
{
s.push(-1);
}
else
{
p=s.top();
while(p!=-1)
{
v.push_back(s.top());
s.pop();
p=s.top();
}
s.pop();
}
ce=c;
}
while(!s.empty())
{
v.push_back(s.top());
s.pop();
}
while(v.size()!=1)
{
for(i=0;i<=v.size()-3;i++)
{
if(v[i]>=0 && v[i+1]>=0 && v[i+2]<0)
{
if(v[i+2]==-4) v[i]=v[i]-v[i+1];
if(v[i+2]==-5) v[i]=v[i]+v[i+1];
if(v[i+2]==-6) v[i]=v[i]/v[i+1];
if(v[i+2]==-7) v[i]=v[i]*v[i+1];
v.erase(v.begin()+i+1,v.begin()+i+3);
break;
}
}
}
fout<<v[0];
return 0;
}