Pagini recente » Cod sursa (job #91018) | Cod sursa (job #2284973) | Cod sursa (job #316477) | Cod sursa (job #2723665) | Cod sursa (job #717171)
Cod sursa(job #717171)
#include<cstdio>
#include<cstdlib>
#include<cstring>
char sExp[100010];
int evaluate(char*,char*);
int main()
{
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
gets(sExp);
printf("%d", evaluate(sExp,sExp +strlen(sExp)-1));
return 0;
}
int ev_n(char*&);
int evaluate(char* pBeg, char* pEnd)
{
int rez=0, termen=1;
for (char* pC=pBeg;pC<=pEnd;pC++)
switch (*pC)
{
case '+':
rez+=termen;
termen=1;
break;
case '-':
rez+=termen;
termen=-1;
break;
case '*':
termen*=ev_n(++pC); break;
case '/':
termen/=ev_n(++pC); break;
default:
termen*=ev_n(pC);
}
rez+=termen;
return rez;
}
int ev_n(char* &pC)
{
if (*pC=='(')
{
int parant=0;
for (char *pI=pC;;pI++)
{
if (*pI=='(') parant++;
else if (*pI==')') parant--;
if (parant==0)
{
int rez=evaluate(pC+1,pI-1);
pC=pI;
return rez;
}
}
}
else
{
int rez=strtod(pC,&pC); pC--;
return rez;
}
}