Pagini recente » Cod sursa (job #485222) | Cod sursa (job #1948907) | Cod sursa (job #2581056) | Cod sursa (job #1481540) | Cod sursa (job #1836945)
#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;
long long p,i;
stack<long long> s;
vector<long long> 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=-50000000;
if(c=='-') p=-40000000;
if(c=='*') p=-70000000;
if(c=='/') p=-60000000;
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]>=-10000000 && v[i+1]>=-10000000 && v[i+2]<-10000000)
{
if(v[i+2]==-40000000) v[i]=v[i]-v[i+1];
if(v[i+2]==-50000000) v[i]=v[i]+v[i+1];
if(v[i+2]==-60000000) v[i]=v[i]/v[i+1];
if(v[i+2]==-70000000) v[i]=v[i]*v[i+1];
v.erase(v.begin()+i+1,v.begin()+i+3);
break;
}
}
}
fout<<v[0];
return 0;
}