Pagini recente » Cod sursa (job #2127172) | Cod sursa (job #1860853) | Cod sursa (job #1116151) | Cod sursa (job #638036) | Cod sursa (job #3274430)
#include <bits/stdc++.h>
using namespace std;
vector <long long> s;
vector <bool> sm;
vector <long long> pr;
char cr[100065];
bool smn=false;
vector <bool> sn;
int main()
{
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
smn=true;
cin.getline(cr,100065);
s.push_back(0);
int l=strlen(cr);
if(cr[0]!='-')
{
sm.push_back(1);
}
int nr=0;
for(int i=0;i<strlen(cr);++i)
{
if(cr[i]=='+')
{
sm.push_back(1);
}
else if(cr[i]=='-')
{
sm.push_back(0);
}
else if(cr[i]=='(')
{
s.push_back(0);
if(cr[i+1]!='-')
{
sm.push_back(1);
}
if(i==0 || strchr("*/",cr[i-1])==0)
{
pr.push_back(1);
}
}
else if(cr[i]=='+')
{
sm.push_back(1);
smn=true;
}
else if(cr[i]=='-')
{
sm.push_back(0);
smn=true;
}
else if(cr[i]=='*')
{
smn=true;
sn.push_back(1);
}
else if(cr[i]=='/')
{
smn=false;
sn.push_back(0);
}
else if(cr[i]>='0' && cr[i]<='9')
{
if(i==0 || strchr("0123456789",cr[i-1])==0)
{
nr=0;
}
nr=nr*10+int(cr[i])-48;
if(i==0 || strchr("*/0123456789",cr[i-1])==0)
{
pr.push_back(1);
sn.push_back(1);
}
if(i==l-1 || strchr("0123456789",cr[i+1])==0)
{
if(sn[sn.size()-1]==true)
{
//cout<< pr[pr.size()-1]<<" "<<nr<<" ";
pr[pr.size()-1]*=nr;
}
else
{
pr[pr.size()-1]/=nr;
}
nr=0;
}
if(l-1==i || strchr("0123456789/*",cr[i+1])==0)
{
if(sm[sm.size()-1]==1)
{
s[s.size()-1]+=pr[pr.size()-1];
pr.pop_back();
}
else
{
s[s.size()-1]-=pr[pr.size()-1];
pr.pop_back();
}
}
}
else if(cr[i]==')')
{
nr=s[s.size()-1];
s.pop_back();
if(i==l-1 || strchr("0123456789",cr[i+1])==0)
{
if(sn[sn.size()-1]==true)
{
pr[pr.size()-1]*=nr;
}
else
{
pr[pr.size()-1]/=nr;
}
}
if(i==l-1 || strchr("0123456789/*",cr[i+1])==0)
{
if(sm[sm.size()-1]==1)
{
s[s.size()-1]+=pr[pr.size()-1];
pr.pop_back();
}
else
{
s[s.size()-1]-=pr[pr.size()-1];
pr.pop_back();
}
}
}
}
cout<<s[0];
return 0;
}