Pagini recente » Cod sursa (job #1038484) | Cod sursa (job #1175037) | Cod sursa (job #1578343) | Cod sursa (job #757646) | Cod sursa (job #2875573)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
stack <char> semne;
stack <long long> operanzi;
string s;
void calcul()
{
long long x,y;
if(semne.top()=='+')
{
x=operanzi.top();
operanzi.pop();
y=operanzi.top();
operanzi.pop();
operanzi.push(x+y);
}
if(semne.top()=='-')
{
x=operanzi.top();
operanzi.pop();
y=operanzi.top();
operanzi.pop();
operanzi.push(y-x);
}
if(semne.top()=='/')
{
x=operanzi.top();
operanzi.pop();
y=operanzi.top();
operanzi.pop();
operanzi.push(1ll*y/x);
}
if(semne.top()=='*')
{
x=operanzi.top();
operanzi.pop();
y=operanzi.top();
operanzi.pop();
operanzi.push((1ll*(x)*(y)));
}
// cout<<y<<" "<<semne.top()<<" "<<x<<"="<<operanzi.top()<<'\n';
semne.pop();
}
int main()
{
getline(fin, s);
for(int i=0;i<s.size();i++)
{
if(s[i]=='(')
semne.push('(');
if(s[i]==')')
{
while (semne.top()!='(')
calcul();
semne.pop();
}
if(s[i]=='+')
{
while(!semne.empty() && (semne.top()=='*' || semne.top()=='/' || semne.top()=='-' || semne.top()=='+'))
calcul();
semne.push('+');
}
if(s[i]=='-')
{
while(!semne.empty() && (semne.top()=='*' || semne.top()=='/' || semne.top()=='-' || semne.top()=='+'))
calcul();
semne.push('-');
}
if(s[i]=='/' || s[i]=='*')
{
while(!semne.empty() && (semne.top()=='*' || semne.top()=='/' ))
calcul();
semne.push(s[i]);
}
if(s[i]>='0' && s[i]<='9')
{
long long nr=s[i]-'0';
i++;
while(s[i]>='0' && s[i]<='9')
{
nr*=10;
nr+=1ll*(s[i]-'0');
i++;
}
i--;
operanzi.push(nr);
}
}
while(!semne.empty())
calcul();
fout<<operanzi.top();
return 0;
}