Pagini recente » Cod sursa (job #1734404) | Cod sursa (job #2422644) | Cod sursa (job #1606615) | Cod sursa (job #1074406) | Cod sursa (job #2112292)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char S[100001],op[100001];
int pr[256],i,nr,k2,k,V[100001];
int calcul(int V1,int V2, char op){
if(op=='+')
return V1+V2;
if(op=='-')
return V1-V2;
if(op=='*')
return V1*V2;
if(op=='/')
return V1/V2;
}
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--;
V[++k2]=nr;
}
else
if(S[i]=='(')
op[++k]=S[i];
else
if(S[i]==')'){
while(op[k]!='('){
nr=calcul(V[k2-1],V[k2],op[k]);
k--;
k2--;
V[k2]=nr;
}
k--;
}
else{
while(k>0&&pr[S[i]]<=pr[op[k]]){
nr=calcul(V[k2-1],V[k2],op[k]);
k--;
k2--;
V[k2]=nr;
}
op[++k]=S[i];
}
}
while(k>0){
nr=calcul(V[k2-1],V[k2],op[k]);
k--;
k2--;
V[k2]=nr;
}
fout<<V[1];
return 0;
}