Pagini recente » Cod sursa (job #96887) | Cod sursa (job #1797814) | Cod sursa (job #870090) | Cod sursa (job #1051674)
#include<fstream>
using namespace std;
ifstream in("evaluare.in");
ofstream out("evaluare.out");
char s[100001],a[100001];
int b[100001],pr[260],nr,ok,n,vf1,vf2;
void calcul(){
char ch;
int rez;
ch=a[vf1];
switch(ch){
case '-': rez=b[vf2-1]-b[vf2];
case '+': rez=b[vf2-1]+b[vf2];
case '/': rez=b[vf2-1]/b[vf2];
case '*': rez=b[vf2-1]*b[vf2];}
vf2--;
vf1--;
b[vf2]=rez;}
int main(){
in>>s;
n=strlen(s);
pr['(']=1;
pr['+']=pr['-']=2;
pr['*']=pr['/']=3;
nr=0;ok=0;
for(int i=0;i<=n;i++){
if(s[i]=='('){
vf1++;
a[vf1]='(';}
else
if(s[i]==')'){
if(ok==1){
vf2++;
b[vf2]=nr;
nr=0;
ok=0;}
while(a[vf1]!='(')
calcul();
vf1--;}
else
if(s[i]>='0'&&s[i]<='9'){
nr=nr*10+s[i]-'0';
ok=1;}
else {
if(ok==1){
vf2++;
b[vf2]=nr;
nr=0;
ok=0;}
while(vf1>0&&pr[s[i]]<=pr[a[vf1]])
calcul();
vf1++;
a[vf1]=s[i];}
}
if(ok==1){
vf2++;
b[vf2]=nr;
nr=0;
ok=0;}
while(vf1>0)
calcul();
out<<b[1];
return 0;}