Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #1471221) | Cod sursa (job #3327300)
#include <fstream>
#include <stack>
#include <vector>
using namespace std;
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
#define int long long
int val(vector<int>v)
{
for (int i=0; i<v.size(); i++)
{
if (v[i]==-9)
{
int cl=1,cr=0;
vector<int>v2;
for (int j=i+1; j<v.size(); j++)
{
if (v[j]==-9) cl++;
if (v[j]==-10) cr++;
//cout<<j<<" "<<cl<<" "<<cr<<"\n";
if (cl==cr)
{
v.erase(v.begin()+i,v.begin()+j+1);
v.insert(v.begin()+i,val(v2));
//cout<<val(v2)<<"\n";
break;
}
else v2.push_back(v[j]);
}
}
}
for (int i=0; i<v.size(); i++)
{
//cout<<v[i]<<" ";
if (v[i]==-3)
{
v[i-1]*=v[i+1];
v.erase(v.begin()+i,v.begin()+i+2);
}
if (v[i]==-4)
{
v[i-1]/=v[i+1];
v.erase(v.begin()+i,v.begin()+i+2);
}
}
int rf=v[0];
for (int i=1; i<v.size(); i+=2)
{
//cout<<v[i]<<" "<<v[i+1];
if (v[i]==-1) rf+=v[i+1];
else rf-=v[i+1];
}
return rf;
}
int32_t main()
{
string str;
cin>>str;
vector<int>v;
for (int i=0; i<str.size(); i++)
{
if (str[i]>='0'&&str[i]<='9')
{
int y=0,r=str.size()-1;
for (int j=i; j<str.size(); j++)
{
if (str[j]<'0'||str[j]>'9') break;
y=y*10+str[j]-'0';
r=j;
}
i=r;
v.push_back(y);
}
if (str[i]=='+') v.push_back(-1);
if (str[i]=='-') v.push_back(-2);
if (str[i]=='*') v.push_back(-3);
if (str[i]=='/') v.push_back(-4);
if (str[i]=='(') v.push_back(-9);
if (str[i]==')') v.push_back(-10);
}
cout<<val(v);
}