Pagini recente » Cod sursa (job #253589) | Cod sursa (job #2967585) | Cod sursa (job #2362337) | Cod sursa (job #614531) | Cod sursa (job #196249)
Cod sursa(job #196249)
#include <stdio.h>
#include <string.h>
char s[100005],oper[100005],polon[100005];
int n,u,v;
int sol[100005];
void poloneza ()
{
int i;
gets(s);
n=strlen (s);
for (i=0; i<n; ++i)
if (s[i]>='0' && s[i]<='9')
polon[++u]=s[i];
else if (s[i]=='+' || s[i]=='-' || s[i]=='*' || s[i]=='/' || s[i]=='(' || s[i]==')')
{
if (v==0)
oper[++v]=s[i];
else
{
if ((s[i]=='+' || s[i]=='-') && (oper[v]=='*' || oper[v]=='/'))
{
while (oper[v]=='*' || oper[v]=='/')
polon[++u]=oper[v--];
oper[++v]=s[i];
}
else if (s[i]==')')
{
while (oper[v]!='(')
polon[++u]=oper[v--];
--v;
}
else
oper[++v]=s[i];
}
}
for (i=v; i; --i)
polon[++u]=oper[i];
}
int calcul (char val,int i)
{
if (val=='+')
return sol[i-2]+sol[i-1];
if (val=='-')
return sol[i-2]-sol[i-1];
if (val=='*')
return sol[i-2]*sol[i-1];
if (val=='/')
return sol[i-2]/sol[i-1];
}
void calculeaza ()
{
int i,j;
for (i=1; i<=u; ++i)
if (polon[i]!='+' && polon[i]!='-' && polon[i]!='*' && polon[i]!='/')
sol[i]=polon[i]-'0';
for (i=1; i<=u; ++i)
if (polon[i]=='+' || polon[i]=='-' || polon[i]=='*' || polon[i]=='/')
{
sol[i-2]=calcul(polon[i],i);
for (j=i-1; j<u-1; ++j)
{
polon[j]=polon[j+2];
sol[j]=sol[j+2];
}
u-=2;
i-=2;
}
printf ("%d",sol[1]);
}
int main ()
{
freopen ("evaluare.in","r",stdin);
freopen ("evaluare.out","w",stdout);
poloneza ();
calculeaza ();
return 0;
}