Pagini recente » Cod sursa (job #1386908) | Cod sursa (job #2699246) | Cod sursa (job #1646465) | Cod sursa (job #3122375) | Cod sursa (job #2132837)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin ("evaluare.in");
ofstream fout ("evaluare.out");
char expresie[100010];
char stivasemn[100010];
int polish[100010];
int eval[100010];
int i,nr,k,t,a,b,n;
char semn;
int main(){
fin>>expresie+1;
n=strlen(expresie+1);
expresie[0]='(';
expresie[n+1]=')';
for(i=0;i<=n+1;i++){
if(expresie[i]=='(')
stivasemn[++k]=expresie[i];
if(expresie[i]>='0' && expresie[i]<='9'){
nr=0;
while(expresie[i]>='0' && expresie[i]<='9'){
nr=nr*10+expresie[i]-'0';
++i;
}
--i;
polish[++t]=nr;
}
if(expresie[i]=='*' || expresie[i]=='/'){
while(k>0 && (stivasemn[k]=='*' || stivasemn[k]=='/')){
if(stivasemn[k]=='*')
polish[++t]=-1;
else
polish[++t]=-2;
--k;
}
stivasemn[++k]=expresie[i];
}
if(expresie[i]=='+' || expresie[i]=='-'){
while(stivasemn[k]!='(' && stivasemn[k]!=')'){
if(stivasemn[k]=='+')
polish[++t]=-3;
if(stivasemn[k]=='-')
polish[++t]=-4;
if(stivasemn[k]=='*')
polish[++t]=-1;
if(stivasemn[k]=='/')
polish[++t]=-2;
--k;
}
stivasemn[++k]=expresie[i];
}
if(expresie[i]==')'){
while(stivasemn[k]!='('){
if(stivasemn[k]=='*')
polish[++t]=-1;
if(stivasemn[k]=='/')
polish[++t]=-2;
if(stivasemn[k]=='+')
polish[++t]=-3;
if(stivasemn[k]=='-')
polish[++t]=-4;
--k;
}
--k;
continue;
}
}
k=0;
for(i=1;i<=t;i++){
if(polish[i]>=0)
eval[++k]=polish[i];
else{
b=eval[k];
a=eval[k-1];
if(polish[i]==-3){
eval[k-1]=a+b;
}
if(polish[i]==-4){
eval[k-1]=a-b;
}
if(polish[i]==-1){
eval[k-1]=a*b;
}
if(polish[i]==-2)
eval[k-1]=a/b;
--k;
}
}
fout<<eval[k];
return 0;
}