Pagini recente » Cod sursa (job #1960112) | Cod sursa (job #855543) | Cod sursa (job #3277192) | Cod sursa (job #752836) | Cod sursa (job #1990290)
#include <fstream>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char sto[100001],S[100001];
int pr[257],i,k1,k2,nr,stn[100001];
int calcul(char op,int a,int b){
if(op=='+')
return a+b;
if(op=='-')
return a-b;
if(op=='*')
return a*b;
return a/b;
}
int main()
{
pr['(']=0;
pr['+']=pr['-']=1;
pr['*']=pr['/']=2;
fin>>S;
for(i=0;S[i]!=0;i++){
if(S[i]=='(')
sto[++k1]=S[i];
else if(S[i]>='0'&&S[i]<='9'){
nr=0;
while(S[i]>='0'&&S[i]<='9'){
nr=nr*10+(S[i]-'0');
i++;
}
i--;
stn[++k2]=nr;
}
else
if(S[i]==')'){
while(sto[k1]!='('){
int k=calcul(sto[k1],stn[k2-1],stn[k2]);
k1--;
k2--;
stn[k2]=k;
}
k1--;}
else{
while(k1>0&&pr[S[i]]<=pr[sto[k1]]){
int k=calcul(sto[k1],stn[k2-1],stn[k2]);
k1--;
k2--;
stn[k2]=k;
}
sto[++k1]=S[i];
}
}
while(k1>0){
int k=calcul(sto[k1],stn[k2-1],stn[k2]);
k1--;
k2--;
stn[k2]=k;
}
fout<<stn[k2];
}