Mai intai trebuie sa te autentifici.
Cod sursa(job #2128049)
Utilizator | Data | 11 februarie 2018 13:28:08 | |
---|---|---|---|
Problema | Evaluarea unei expresii | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 2.83 kb |
#include<fstream>
#include<cstring>
#include<cctype>
using namespace std;
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
const int nmax=100000;
char s[nmax+5];
int n;
int stiva_nr[nmax+5],vf_nr;
int stiva_semne[nmax+5],vf_semne;
int main()
{
cin.getline(s,nmax+5);
n=strlen(s);
for(int i=0;i<n;i++)
{
if(isdigit(s[i]))
{
if(i==0 or !isdigit(s[i-1]))
stiva_nr[++vf_nr]=s[i]-'0';
else
stiva_nr[vf_nr]=stiva_nr[vf_nr]*10+s[i]-'0';
}
if(s[i]=='(')
stiva_semne[++vf_semne]='(';
if(s[i]==')')
{
while(stiva_semne[vf_semne]!='(')
{
vf_nr--;
if(stiva_semne[vf_semne]=='+')
stiva_nr[vf_nr]+=stiva_nr[vf_nr+1];
if(stiva_semne[vf_semne]=='-')
stiva_nr[vf_nr]-=stiva_nr[vf_nr+1];
if(stiva_semne[vf_semne]=='*')
stiva_nr[vf_nr]*=stiva_nr[vf_nr+1];
if(stiva_semne[vf_semne]=='/')
stiva_nr[vf_nr]/=stiva_nr[vf_nr+1];
vf_semne--;
}
vf_semne--;
}
if(s[i]=='*' or s[i]=='/')
{
while(vf_semne and (stiva_semne[vf_semne]=='*') or (stiva_semne[vf_semne]=='/'))
{
vf_nr--;
if(stiva_semne[vf_semne]=='*')
stiva_nr[vf_nr]*=stiva_nr[vf_nr+1];
if(stiva_semne[vf_semne]=='/')
stiva_nr[vf_nr]/=stiva_nr[vf_nr+1];
vf_semne--;
}
stiva_semne[++vf_semne]=s[i];
}
if(s[i]=='+' or s[i]=='-')
{
while(vf_semne and stiva_semne[vf_semne]!='(')
{
vf_nr--;
if(stiva_semne[vf_semne]=='+')
stiva_nr[vf_nr]+=stiva_nr[vf_nr+1];
if(stiva_semne[vf_semne]=='-')
stiva_nr[vf_nr]-=stiva_nr[vf_nr+1];
if(stiva_semne[vf_semne]=='*')
stiva_nr[vf_nr]*=stiva_nr[vf_nr+1];
if(stiva_semne[vf_semne]=='/')
stiva_nr[vf_nr]/=stiva_nr[vf_nr+1];
vf_semne--;
}
stiva_semne[++vf_semne]=s[i];
}
}
while(vf_semne)
{
vf_nr--;
if(stiva_semne[vf_semne]=='+')
stiva_nr[vf_nr]+=stiva_nr[vf_nr+1];
if(stiva_semne[vf_semne]=='-')
stiva_nr[vf_nr]-=stiva_nr[vf_nr+1];
if(stiva_semne[vf_semne]=='*')
stiva_nr[vf_nr]*=stiva_nr[vf_nr+1];
if(stiva_semne[vf_semne]=='/')
stiva_nr[vf_nr]/=stiva_nr[vf_nr+1];
vf_semne--;
}
cout<<stiva_nr[1];
return 0;
}
/**
**/