Pagini recente » Cod sursa (job #1315116) | Cod sursa (job #685102) | Cod sursa (job #1954423) | Cod sursa (job #2193061) | Cod sursa (job #3259571)
#include <bits/stdc++.h>
std::ifstream fin("evaluare.in");
std::ofstream fout("evaluare.out");
std::stack<int>s;
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=ans*10+(ec[i]-'0');
i++;
}
return {ans,--i};
}
void fa()
{
int b=s.top();
s.pop();
int a=s.top();
s.pop();
char op=operatii.top();
operatii.pop();
if(op=='+')s.push(a+b);
else if(op=='-')s.push(a-b);
else if(op=='*')s.push(a*b);
else if(op=='/')s.push(a/b);
}
int main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::string ec;
fin>>ec;
for(int i=0;i<ec.length();i++)
{
if(ec[i]=='(')
{
operatii.push('(');
}
else if(ec[i]==')')
{
while(!operatii.empty()&&operatii.top()!='(')
{
fa();
}
if(!operatii.empty())operatii.pop();
}
else if(ec[i]>='0'&&ec[i]<='9')
{
std::pair<int,int>num=numar(ec, i);
s.push(num.first);
i=num.second;
}
else if(ec[i]=='+'||ec[i]=='-'||ec[i]=='*'||ec[i]=='/')
{
while(!operatii.empty()&&operatii.top()!='('&&((ec[i]=='+'||ec[i]=='-')&&((operatii.top()=='/'||operatii.top()=='*'))||((ec[i]=='*'||ec[i]=='/')&&(operatii.top()=='/'||operatii.top()=='*'))))
{
fa();
}
operatii.push(ec[i]);
}
}
while(!operatii.empty())
fa();
fout<<s.top();
return 0;
}