Pagini recente » Cod sursa (job #3225266) | Cod sursa (job #2407620) | Cod sursa (job #1028585) | Cod sursa (job #385403) | Cod sursa (job #1889550)
#include<cstdio>
#include<cstring>
#include<cctype>
int priority(char op)
{
int p;
switch(op)
{
case '+':p=1;break;
case '-':p=1;break;
case '*':p=2;break;
case '/':p=2;break;
}
return p;
}
char op[100005];
int rez[100005];
char s[100005];
int top,top2;
int main(){
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
int n,i,nr;
char ch;
gets(s);
n=strlen(s);
for(i=0;i<n;i++)
{
if(s[i]=='(')
op[++top]='(';
else if(isdigit(s[i]))
{
nr=0;
while(i<n && isdigit(s[i]))
{
nr=nr*10+s[i]-'0';
i++;
}
i--;
rez[++top2]=nr;
}
else
if(s[i]==')')
{
while(top>0&&op[top]!='(')
{
switch(op[top])
{
case '+':rez[top2-1]+=rez[top2];
top2--;
break;
case '-':rez[top2-1]-=rez[top2];
top2--;
break;
case '*':rez[top2-1]*=rez[top2];
top2--;
break;
case '/':rez[top2-1]/=rez[top2];
top2--;
break;
}
top--;
}
top--;
}
else
if(top==0||op[top]=='('||priority(s[i])>priority(op[top]))
op[++top]=s[i];
else
{
while(top>0&&op[top]!='('&&priority(s[i])<=priority(op[top]))
{
ch=op[top];
switch(op[top])
{
case '+':rez[top2-1]+=rez[top2];
top2--;
break;
case '-':rez[top2-1]-=rez[top2];
top2--;
break;
case '*':rez[top2-1]*=rez[top2];
top2--;
break;
case'/':rez[top2-1]/=rez[top2];
top2--;
break;
}
top--;
}
op[++top]=s[i];
}
}
for(top;top>=1;top--)
{
switch(op[top])
{
case '+':rez[top2-1]+=rez[top2];
top2--;
break;
case '-':rez[top2-1]-=rez[top2];
top2--;
break;
case '*':rez[top2-1]*=rez[top2];
top2--;
break;
case'/':rez[top2-1]/=rez[top2];
top2--;
break;
}
}
printf("%d",rez[1]);
return 0;
}