Pagini recente » Cod sursa (job #2936809) | Cod sursa (job #105411) | Cod sursa (job #39723) | Cod sursa (job #626912) | Cod sursa (job #445982)
Cod sursa(job #445982)
#include<stdio.h>
#include<string.h>
int nr;
int v[100005],num,smn,val;
char op[100005],s[100005];
int ord[501];
int main ()
{
int i,c,c1,c2;
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
c='+';
ord[c]=4;
c='-';
ord[c]=3;
c='/';
ord[c]=1;
c='*';
ord[c]=2;
gets(s);
nr=strlen(s);
val=1;
op[1]='(';
smn=1;
s[nr]=')';
op[0]=' ';
for(i=0;i<=nr;i++)
{
if(s[i]>='0' && s[i]<='9')
{
v[val]=v[val]*10+s[i]-'0';
num=1;
continue;
}
if(num)
{
val++;
num=0;
}
if(s[i]=='(')
{
op[++smn]='(';
continue;
}
if(s[i]!=')')
{
c2=s[i];
val--;
while(1)
{
if(op[smn]=='(')
break;
c1=op[smn];
if(ord[c2]<=ord[c1])
break;
if(op[smn]=='-')
v[val-1]-=v[val];
if(op[smn]=='*')
v[val-1]*=v[val];
if(op[smn]=='/')
v[val-1]/=v[val];
if(op[smn]=='+')
v[val-1]+=v[val];
val--;
smn--;
}
val++;
v[val]=0;
op[++smn]=s[i];
continue;
}
val--;
while(op[smn]!='(')
{
if(op[smn]=='-')
v[val-1]-=v[val];
if(op[smn]=='*')
v[val-1]*=v[val];
if(op[smn]=='/')
v[val-1]/=v[val];
if(op[smn]=='+')
v[val-1]+=v[val];
smn--;
val--;
}
smn--;
val++;
v[val]=0;
}
printf("%d\n",v[1]);
return 0;
}