Pagini recente » Cod sursa (job #923787) | Cod sursa (job #419801) | Cod sursa (job #695374) | Cod sursa (job #866689) | Cod sursa (job #2049349)
# include <fstream>
# include <cstring>
# define DIM 100010
# define INF 1000000000
# define a first
# define b second
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char t[DIM],s[DIM];
pair<int,char> v[DIM];
int vec[DIM],n,i,nr,k,u,r;
int main () {
fin>>t+2;
t[1]='(';
n=strlen(t+1);
n++;
t[n]=')';
for(i=1;i<=n;i++){
if((!(t[i]>='0'&&t[i]<='9'))&&nr){
v[++k].a=nr;
nr=0;
}
if(t[i]==')'){
while(s[u]!='('){
v[++k].a=-INF;
v[k].b=s[u];
u--;
}
u--;
continue;
}
if(t[i]=='('){
s[++u]=t[i];
continue;
}
if(t[i]=='+'||t[i]=='-'){
while(s[u]!='('&&s[u]!=')'){
v[++k].a=-INF;
v[k].b=s[u];
u--;
}
s[++u]=t[i];
if(k==0)
v[++k].a=0;
continue;
}
if(t[i]=='*'||t[i]=='/'){
while(s[u]=='*'||s[u]=='/'){
v[++k].a=-INF;
v[k].b=s[u];
u--;
}
s[++u]=t[i];
continue;
}
nr=nr*10+t[i]-'0';
}
for(i=1;i<=k;i++)
if(v[i].a!=-INF)
vec[++r]=v[i].a;
else{
if(v[i].b=='*')
vec[r-1]*=vec[r];
if(v[i].b=='/')
vec[r-1]/=vec[r];
if(v[i].b=='-')
vec[r-1]-=vec[r];
if(v[i].b=='+')
vec[r-1]+=vec[r];
r--;
}
fout<<vec[1]<<"\n";
return 0;
}