Pagini recente » Cod sursa (job #698404) | Cod sursa (job #923715) | Cod sursa (job #1977816) | Cod sursa (job #1943932) | Cod sursa (job #3284305)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fcin("evaluare.in");
ofstream fout("evaluare.out");
string s;
int vf,i;
struct elem
{
int val;
char semn;
};
elem stv[100001];
inline int priority(char x)
{
if(x=='0') return 0;
if(x=='+' || x=='-') return 1;
if(x=='*' || x=='/') return 2;
}
inline void golire(char x)
{
while(vf>1 && stv[vf-1].val!=-1 && priority(stv[vf].semn)>=priority(x))
{
if(stv[vf].semn=='+') stv[vf-1].val+=stv[vf].val;
if(stv[vf].semn=='*') stv[vf-1].val*=stv[vf].val;
if(stv[vf].semn=='-') stv[vf-1].val-=stv[vf].val;
if(stv[vf].semn=='/') stv[vf-1].val/=stv[vf].val;
vf--;
}
}
int main()
{
fcin>>s;
while(i<s.size())
{
if(s[i]=='(')
{
stv[++vf]={-1,0};
}
else
if(s[i]==')')
{
golire('0');
stv[vf-1]=stv[vf];
vf--;
}
else
{
char p;
if(i==0 || s[i-1]=='(') p='+'; else p=s[i], i++;
int val=0;
while(i<s.size() && isdigit(s[i])) val=val*10+s[i]-48, i++; i--;
stv[++vf]={val, p};
if(i+1<s.size())
golire(s[i+1]);
}
i++;
}
golire('0');
fout<<stv[1].val;
return 0;
}