Pagini recente » Cod sursa (job #2981953) | Cod sursa (job #1734573) | Cod sursa (job #903466) | Cod sursa (job #2487986) | Cod sursa (job #2285208)
#include <fstream>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
int i,val[100000],nr,k1,k2,rez;
char s[100001],op[100000],pr[100];
int operatie(char c, int a, int b){
if(c=='+')
return a+b;
if(c=='-')
return a-b;
if(c=='*')
return a*b;
if(c=='/')
return a/b;
}
int main()
{
fin>>s;
pr['+']=pr['-']=1;
pr['*']=pr['/']=2;
for(i=0;s[i]!=0;i++){
if(s[i]>='0' && s[i]<='9'){
nr=0;
while(s[i]>='0' && s[i]<='9'){
nr=nr*10+s[i]-'0';
i++;
}
i--;
val[++k2]=nr;
}
else
if(s[i]=='(')
op[++k1]='(';
else{
if(s[i]==')'){
while(op[k1]!='('){
rez=operatie(op[k1],val[k2-1],val[k2]);
k1--;
k2--;
val[k2]=rez;
}
k1--;
}
else{
while(k1>0 && pr[op[k1]]>=pr[s[i]]){
rez=operatie(op[k1],val[k2-1],val[k2]);
k1--;
k2--;
val[k2]=rez;
}
op[++k1]=s[i];
}
}
}
while(k1>0){
rez=operatie(op[k1],val[k2-1],val[k2]);
k1--;
k2--;
val[k2]=rez;
}
fout<<val[1];
return 0;
}