Pagini recente » Cod sursa (job #559681) | Cod sursa (job #1109243) | Cod sursa (job #979578) | Cod sursa (job #2618286) | Cod sursa (job #1977800)
#include <fstream>
#include <deque>
#include <string.h>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char x[100003];
int i=0,n;
deque <char> st,pend;
deque <int> tm,pendn;
int get_termen()
{
int nr=0;
while(x[i]>='0'&&x[i]<='9')
{
nr=nr*10+x[i]-'0';
i++;
}
return nr;
}
void efect()
{
int x1=pendn.back(),x2;
char s=pend.back();
pend.pop_back();
pendn.pop_back();
while(!pend.empty()&&(((s=='+'||s=='-')&&(pend.back()!='*'&&pend.back()!='/'))||s=='*'||s=='/'))
{
x2=pendn.back();
pendn.pop_back();
if(s=='+')
x1+=x2;
else
if(s=='-')
x1-=x2;
else
if(s=='*')
x1*=x2;
else
if(s=='/')
x1/=x2;
s=pend.back();
pend.pop_back();
}
if(!pend.empty())
efect();
x2=pendn.back();
pendn.pop_back();
if(s=='+')
x1+=x2;
else
if(s=='-')
x1-=x2;
else
if(s=='*')
x1*=x2;
else
if(s=='/')
x1/=x2;
pendn.push_back(x1);
}
void get_expresie()
{
while(i<n)
{
if(x[i]>='0'&&x[i]<='9')
tm.push_back(get_termen());
else
if(x[i]==')')
{
i++;
pendn.push_back(tm.back());
tm.pop_back();
while(st.back()!='(')
{
pend.push_back(st.back());
pendn.push_back(tm.back());
st.pop_back();
tm.pop_back();
}
st.pop_back();
efect();
tm.push_back(pendn.front());
pendn.pop_front();
}
else
{
st.push_back(x[i]);
i++;
}
}
pendn.push_back(tm.back());
tm.pop_back();
while(!st.empty())
{
pend.push_back(st.back());
pendn.push_back(tm.back());
st.pop_back();
tm.pop_back();
}
efect();
}
int main()
{
fin.getline(x,100003);
n=strlen(x);
get_expresie();
fout<<pendn.front();
return 0;
}