Pagini recente » Cod sursa (job #3347099) | Cod sursa (job #3303328) | Cod sursa (job #3351187) | Cod sursa (job #3320543) | Cod sursa (job #2220283)
#include <cstdio>
#include <cstring>
using namespace std;
char Exp[100005];
int long LL, i, nr;
int Importance[48];
int long FormNumber(int long i){
nr=0;
while(Exp[i]>='0' && Exp[i]<='9')
{nr=nr*10+(Exp[i]-'0'); i++;}
return i;
}
int long Evaluate(int long a, int long b, char c){
switch (c){
case '*':{a=a*b; break;}
case '/':{a=a/b; break;}
case '+':{a=a+b; break;}
default:a=a-b;
}
return a;
}
char Stack[100005];
int long Numbers[100005], vfchar, vfnumb;
int main()
{
freopen("evaluare.in", "r", stdin);
freopen("evaluare.out", "w", stdout);
Exp[0]='(';
fgets(Exp+1, 100005, stdin);
LL=strlen(Exp);
Exp[LL-1]=')';
Importance[42]=Importance[47]=2;
Importance[43]=Importance[45]=1;
int long i=0, Result;
while(i<LL){
if(Exp[i]=='('){ Stack[++vfchar]='(';}
if(Exp[i]>='0' && Exp[i]<='9'){i=FormNumber(i); Numbers[++vfnumb]=nr; i--;}
if(Exp[i]>=42 && Exp[i]<=47){
while(vfchar && Importance[Exp[i]]<=Importance[Stack[vfchar]]){
Numbers[vfnumb-1]=Evaluate(Numbers[vfnumb-1], Numbers[vfnumb], Stack[vfchar]);
vfnumb--; vfchar--;
}
Stack[++vfchar]=Exp[i];
}
if(Exp[i]==')'){while(Stack[vfchar]!='('){
Numbers[vfnumb-1]=Evaluate(Numbers[vfnumb-1], Numbers[vfnumb], Stack[vfchar]);
vfnumb--; vfchar--;
}
vfchar--;}
i++;
}
printf("%ld", Numbers[vfnumb]);
return 0;
}