Pagini recente » Cod sursa (job #983503) | Cod sursa (job #652473) | Cod sursa (job #2615827) | Cod sursa (job #2589311) | Cod sursa (job #3259508)
#include <fstream>
#include <cstring>
#include <stack>
std::ifstream fin("evaluare.in");
std::ofstream fout("evaluare.out");
std::string ec;
std::stack<int>s;
std::stack<int>f;
std::stack<char>operatii;
std::pair<int,int> numar(std::string ec,int i)
{
int ans=0;
while(i<ec.size()&&ec[i]>='0'&&ec[i]<='9')
{
ans*=10;
ans+=ec[i]-'0';
i++;
}
return std::make_pair(ans,--i);
}
void fa()
{
long long x;
x=s.top();
s.pop();
if(operatii.top()=='+')
{
s.top()+=x;
}
else if(operatii.top()=='-')
{
s.top()-=x;
}
else if(operatii.top()=='*')
{
s.top()*=x;
}
else if(operatii.top()=='/')
{
s.top()/=x;
}
operatii.pop();
}
int main()
{
std::ios_base::sync_with_stdio(false);
fin.tie(nullptr);
fout.tie(nullptr);
getline(fin,ec);
for(int i=0;i<ec.length();i++)
{
if(ec[i]=='(')
{
operatii.push('(');
i++;
std::pair<int,int>r=numar(ec,i);
s.push(r.first);
i=r.second;
}
else if(ec[i]==')')
{
while(operatii.top()!='(')
{
fa();
}
operatii.pop();
//std::cout<<s.top()<<' '<<i<<'\n';
}
else if(ec[i]>='0'&&ec[i]<='9')
{
std::pair<int,int>r=numar(ec,i);
s.push(r.first);
i=r.second;
}
else if(ec[i]=='-'||ec[i]=='+'||ec[i]=='*'||ec[i]=='/')
{
while(!operatii.empty()&&operatii.top()!='('&&((ec[i]=='+'||ec[i]=='-')||((ec[i]=='*'||ec[i]=='/')&&(operatii.top()=='/'||operatii.top()=='*'))))
fa();
operatii.push(ec[i]);
}
}
while(!operatii.empty())
{
fa();
}
fout<<s.top();
return 0;
}