Pagini recente » Cod sursa (job #2304246) | Cod sursa (job #534207) | Cod sursa (job #967981) | Cod sursa (job #2534064) | Cod sursa (job #2216038)
#include <cstdio>
#include <cstring>
using namespace std;
int long Numbers[100005];
int long nr, i, L, vfchar, vfnumb, p;
char Exp[100005], Stack[100005], C;
void FormNumb(){
nr=0; p=1;
while(Exp[i]>='0' && Exp[i]<='9'){nr=nr+(Exp[i]-'0')*p; p*=10; i--;}
}
int main()
{
freopen("evaluare.in", "r", stdin);
freopen("evaluare.out", "w", stdout);
fgets(Exp, 100005, stdin);
L=strlen(Exp);
for(i=L-1; i>=0; i--){
if(Exp[i]==')' || Exp[i]=='+' || Exp[i]=='-'){Stack[++vfchar]=Exp[i]; continue;}
if(Exp[i]>='0' && Exp[i]<='9'){FormNumb(); Numbers[++vfnumb]=nr; i++;}
if(Exp[i]=='('){
while(Stack[vfchar]!=')'){
vfnumb--; vfchar--;
switch (Stack[vfchar+1]){
case '+':{Numbers[vfnumb]=Numbers[vfnumb+1]+Numbers[vfnumb]; break;}
default:{Numbers[vfnumb]=Numbers[vfnumb+1]-Numbers[vfnumb];}
}
} vfchar--;
if(Stack[vfchar]=='*'||Stack[vfchar]=='/'){
vfchar--;
vfnumb--;
if(Stack[vfchar+1]=='*')Numbers[vfnumb]=Numbers[vfnumb+1]*Numbers[vfnumb];
else Numbers[vfnumb]=Numbers[vfnumb+1]/Numbers[vfnumb];
}
}
if((Exp[i]=='*'||Exp[i]=='/') && Exp[i-1]!=')'){
C=Exp[i];
i--;
FormNumb();
i++;
if(C=='*')Numbers[vfnumb]=nr*Numbers[vfnumb];
else Numbers[vfnumb]=nr/Numbers[vfnumb];
}
if((Exp[i]=='*'||Exp[i]=='/') && Exp[i-1]==')'){
Stack[++vfchar]=Exp[i];
}
}
while(vfnumb>=1){
vfnumb--; vfchar--;
switch (Stack[vfchar+1]){
case '+':{Numbers[vfnumb]=Numbers[vfnumb+1]+Numbers[vfnumb]; break;}
default:{Numbers[vfnumb]=Numbers[vfnumb+1]-Numbers[vfnumb];}
}
}
printf("%ld", Numbers[vfnumb]);
return 0;
}