Pagini recente » Autentificare | Cod sursa (job #1907901) | Cod sursa (job #2210353) | Cod sursa (job #394021) | Cod sursa (job #2357403)
#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(int st,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));
}