Pagini recente » Cod sursa (job #1054328) | Cod sursa (job #117557) | Cod sursa (job #1682445) | Cod sursa (job #1269759) | Cod sursa (job #2034648)
#include <bits/stdc++.h>
#define inf (1<<30)
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char s[100002];
int st[100002];
int main()
{
int i,top,var;
fin>>s;
top=0;
for(i=0;s[i];)
{
if('0'<=s[i] && s[i]<='9')
{
var=0;
while('0'<=s[i] && s[i]<='9')
{
var=var*10+s[i]-'0';
i++;
}
if(top && st[top]==-inf)
{
top--;
st[top]*=var;
}
else if(top && st[top]==inf+2)
{
top--;
st[top]/=var;
}
else if(top && st[top]==inf+1)
{
top--;
st[++top]=(-1*var);
}
else st[++top]=var;
}
else if(s[i]=='*')
{
st[++top]=-inf;
i++;
}
else if(s[i]=='-')
{
st[++top]=inf+1;
i++;
}
else if(s[i]=='/')
{
st[++top]=inf+2;
i++;
}
else if(s[i]=='(')
{
st[++top]=inf;
i++;
}
else if(s[i]=='+')i++;
else
{
var=0;
while(top && st[top]!=inf)
{
var+=st[top];
top--;
}
top--;
if(top && st[top]==-inf)
{
top--;
st[top]*=var;
}
else if(top && st[top]==inf+2)
{
top--;
st[top]/=var;
}
else if(top && st[top]==inf+1)
{
top--;
st[++top]=(-1*var);
}
else st[++top]=var;
i++;
}
}
var=0;
while(top>0)
{
var+=st[top];
top--;
}
fout<<var;
return 0;
}