Pagini recente » Cod sursa (job #1303192) | Cod sursa (job #389721) | Cod sursa (job #823734) | Cod sursa (job #2904122) | Cod sursa (job #503624)
Cod sursa(job #503624)
# include <stdio.h>
# include <string.h>
int c[100005],k,l,n,i,nr,s[100005];
char ch,st[100005],a[100007];
void form (int &nr)
{
int x=a[i]-48;
while (a[i+1]>='0' && a[i+1]<='9')
{
i++;
x=x*10+(a[i]-48);
}
nr=x;
}
void add (char ch)
{
l++;
st[l]=ch;
}
void scoate (char ch)
{
if (ch=='+')
{
k++;
c[k]=-1;
}
if (ch=='-')
{
k++;
c[k]=-2;
}
if (ch=='*')
{
k++;
c[k]=-3;
}
if (ch=='/')
{
k++;
c[k]=-4;
}
}
int main ()
{
freopen("evaluare.in","r",stdin);
freopen ("evaluare.out","w",stdout);
scanf ("%s",&a);
for (i=0;i<strlen (a);i++)
{
ch=a[i];
if (a[i]>='0' && a[i]<='9')
{
form (nr);
k++;
c[k]=nr;
}
else
{
if (ch=='(')
add('(');
if (ch==')')
{
while (st[l]!='(')
{
scoate (st[l]);
l--;
}
l--;
}
if (ch=='+' || ch=='-')
{
while (st[l]=='+' || st[l]=='-' || st[l]=='*' ||st[l]=='/')
{
scoate (st[l]);
l--;
}
add (ch);
}
if (ch=='*' || ch=='/')
{
while (st[l]=='*' || st[l]=='/')
{
scoate (st[l]);
l--;
}
add (ch);
}
}
}
while (l>0)
{
scoate (st[l]);
l--;
}
n=k;
l=0;
for (i=1;i<=n;i++)
{
if (c[i]>=0)
{
l++;
s[l]=c[i];
}
else
{
if (c[i]==-1)
{
l--;
s[l]=s[l]+s[l+1];
}
if (c[i]==-2)
{
l--;
s[l]=s[l]-s[l+1];
}
if (c[i]==-3)
{
l--;
s[l]=s[l]*s[l+1];
}
if (c[i]==-4)
{
l--;
s[l]=s[l]/s[l+1];
}
}
}
printf ("%i",s[1]);
return 0;
}