Pagini recente » Cod sursa (job #3174921) | Cod sursa (job #389602) | Cod sursa (job #2586810) | Cod sursa (job #2588240) | Cod sursa (job #3274982)
#include <bits/stdc++.h>
using namespace std;
int ev(char cr)
{
if(cr=='+' || cr=='-')
{
return 2;
}
else if(cr=='*' || cr=='/')
{
return 3;
}
else if(cr=='(')
{
return 1;
}
}
char cr[100055];
stack <char> s;
string r;
vector <long long int> v;
int main()
{
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
cin>>cr;
int l=strlen(cr);
for(int i=0;i<l;++i)
{
if(cr[i]=='+' || cr[i]=='-' || cr[i]=='*' || cr[i]=='/')
{
while(s.empty()==0 && ev(s.top())>=ev(cr[i]))
{
r+=s.top();
s.pop();
}
s.push(cr[i]);
}
else if(cr[i]=='(')
{
s.push(cr[i]);
}
else if(cr[i]==')')
{
while(s.empty()==0 && s.top()!='(')
{
r+=s.top();
s.pop();
}
s.pop();
}
else
{
while(cr[i]>='0' && cr[i]<='9' && i<l)
{
r+=cr[i];
++i;
}
r+=" ";
i--;
}
}
while(s.empty()==0)
{
r+=s.top();
s.pop();
}
//cout<<r<<" ";
long long int nr=0,c;
for(int i=0;i<r.size();++i)
{
if(r[i]>='0' && r[i]<='9')
{
while(r[i]>='0' && r[i]<='9' && i<r.size())
{
nr=nr*10+int(r[i])-48;
++i;
}
--i;
v.push_back(nr);
nr=0;
}
else
{
int nr=0;
//cout<<v[v.size()-1]<<" "<<v[v.size()-2]<<" ";
if(r[i]=='+')
{
nr=v[v.size()-1]+v[v.size()-2];
v.pop_back();
v.pop_back();
v.push_back(nr);
}
if(r[i]=='-')
{
nr=v[v.size()-2]-v[v.size()-1];
v.pop_back();
v.pop_back();
v.push_back(nr);
}
if(r[i]=='*')
{
nr=v[v.size()-1]*v[v.size()-2];
v.pop_back();
v.pop_back();
v.push_back(nr);
}
if(r[i]=='/')
{
nr=v[v.size()-2]/v[v.size()-1];
v.pop_back();
v.pop_back();
v.push_back(nr);
}
}
}
cout<<v[0];
return 0;
}