Nu aveti permisiuni pentru a descarca fisierul grader_test8.ok
Cod sursa(job #3284294)
Utilizator | Data | 11 martie 2025 13:41:24 | |
---|---|---|---|
Problema | Evaluarea unei expresii | Scor | 0 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 1.36 kb |
#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;
}