Pagini recente » Cod sursa (job #708170) | Cod sursa (job #478499) | Cod sursa (job #1584712) | Cod sursa (job #2617786) | Cod sursa (job #2357421)
#include <iostream>
#include <fstream>
#include <cstring>
#include <stack>
#include <vector>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char s[100005];
int n,Next[100005];
stack < int > st;
inline int e(const int st,const int dr)
{
vector < int > v;
int nr,x,semn,sol,i;
x=0;
sol=0;
semn=1;
for(i=st;i<=dr;i++)
{
if(s[i]=='(')
{
x=e(i+1,Next[i]-1);
i=Next[i];
continue;
}
if('0'<=s[i]&&s[i]<='9')
{
x=x*10+(s[i]-'0');
continue;
}
if(semn==0)
v.back()=v.back()*x;
else if(semn==-2)
v.back()=v.back()/x;
else v.push_back(semn*x);
if(s[i]=='*')
semn=0;
else if(s[i]=='/')
semn=-2;
else
{
semn=1;
if(s[i]=='-')
semn=-1;
}
x=0;
}
if(semn==0)
v.back()=v.back()*x;
else if(semn==-2)
v.back()=v.back()/x;
else v.push_back(x*semn);
for(i=0;i<v.size();i++)
sol=sol+v[i];
return sol;
}
void check()
{
int i;
for(i=1;i<=n;i++)
{
if(s[i]=='(') st.push(i);
else if(s[i]==')')
{
Next[st.top()]=i;
st.pop();
}
}
}
int main()
{
fin>>s+1;
n=strlen(s+1);
check();
fout<<(e(1,n));
}