Pagini recente » Cod sursa (job #1484340) | Cod sursa (job #2149057) | Cod sursa (job #1059232) | Cod sursa (job #2082684) | Cod sursa (job #2480919)
#include <fstream>
#include <algorithm>
#include <cstring>
using namespace std;
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
char sir[100001],sirsemne[100001],stsemne[50001];
int sirnumere[50001],stnumere[50001];
int main()
{
int i,j,k,nr,n;
cin>>sir;
n=strlen(sir);
j=1;
k=0;
for(i=0;i<=n-1;i++){
if(sir[i]<='9' && sir[i]>='0'){
nr=0;
while(sir[i]<='9' && sir[i]>='0'){
nr=nr*10+sir[i]-'0';
i++;
}
i--;
sirnumere[j]=nr;
j++;
}
else
if(sir[i]=='('){
k++;
stsemne[k]='(';
}
else
if(sir[i]==')'){
while(stsemne[k]!='(' && k>0){
sirsemne[j]=stsemne[k];
k--;
j++;
}
stsemne[k]=0;
k--;
}
else
if(sir[i]=='-' || sir[i]=='+'){
while(stsemne[k]!='(' && k>0){
sirsemne[j]=stsemne[k];
k--;
j++;
}
k++;
stsemne[k]=sir[i];
}
else
if(sir[i]=='*' || sir[i]=='/'){
while(stsemne[k]!='(' && stsemne[k]!='+' && stsemne[k]!='-' && k>0){
if(stsemne[i]=='*' || stsemne[i]=='/'){
sirsemne[j]=stsemne[k];
k--;
j++;
}
}
k++;
stsemne[k]=sir[i];
}
}
while(k>0){
sirsemne[j]=stsemne[k];
k--;
j++;
}
j--;
k=0;
for(i=1;i<=j;i++){
if(sirnumere[i]==0 && sirsemne[i]!=0){
if(sirsemne[i]=='-'){
stnumere[k-1]=stnumere[k-1]-stnumere[k];
k--;
}
if(sirsemne[i]=='+'){
stnumere[k-1]=stnumere[k-1]+stnumere[k];
k--;
}
if(sirsemne[i]=='*'){
stnumere[k-1]=stnumere[k-1]*stnumere[k];
k--;
}
if(sirsemne[i]=='/'){
stnumere[k-1]=stnumere[k-1]/stnumere[k];
k--;
}
}
else{
k++;
stnumere[k]=sirnumere[i];
}
}
cout<<stnumere[1];
return 0;
}