Nu aveti permisiuni pentru a descarca fisierul grader_test1.ok
Cod sursa(job #3284313)
Utilizator | Data | 11 martie 2025 14:03:56 | |
---|---|---|---|
Problema | Evaluarea unei expresii | Scor | 50 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 1.47 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<<30) && 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]=='(')
{
char p;
if(i-1==-1 || i-1=='(') p='+'; else p=s[i-1];
stv[++vf]={-(1<<30),p};
}
else if(s[i]==')')
{
golire('0');
stv[vf-1].val=stv[vf].val;
vf--;
}
else if(isdigit(s[i]))
{
char p;
if(i-1==-1 || i-1=='(') p='+'; else p=s[i-1];
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() && s[i+1]!=')')
golire(s[i+1]);
}
i++;
}
golire('0');
fout<<stv[1].val;
return 0;
}