Pagini recente » Cod sursa (job #3208445) | Cod sursa (job #2718545) | Cod sursa (job #1782263) | Cod sursa (job #1192476) | Cod sursa (job #1483528)
#include<fstream>
#include<stack>
#include<cstring>
#include<vector>
using namespace std;
const int NMAX=100005;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char s[NMAX];
int poz[NMAX];
stack<int> St;
inline int Solve(const int st,const int dr)
{
vector < int > v;
int semn = 1, sol = 0,x = 0;
for(int i=st;i<=dr;++i)
{
if(s[i] == '(')
{
x = Solve(i+1,poz[i]-1);
i = poz[i];
continue;
}
if('0'<= s[i] && s[i]<='9')
{
x=x*10+s[i]-'0';
continue;
}
if(semn == 0)
v.back()*=x;
else
if(semn == -2)
v.back()/=x;
else
v.push_back(x*semn);
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()*=x;
else
if(semn == -2)
v.back()/=x;
else
v.push_back(x*semn);
sol = 0;
for(int i=0;i<v.size();++i)
sol += v[i];
return sol;
}
int main()
{
f>>(s+1);
int n=strlen(s+1);
for(int i=1;i<=n;i++)
if(s[i]=='(')
St.push(i);
else
if(s[i]==')')
{
poz[St.top()]=i;
St.pop();
}
g<<Solve(1,n)<<"\n";
return 0;
}