#include<stdio.h>
#define MAX_CARACTERE 100001
char sir[MAX_CARACTERE], *cursor=sir;
long produs();
long subexpresie();
//adunare() apeleza produs(), care apeleaza suexpresie(), care apeleaza adunare() => recursivitate indirecta
long adunare()
{
long rez=produs();
while((*cursor == '+') || (*cursor == '-'))
{
switch(*cursor)
{
case '+':
++cursor; //deplasam cursorul sa treaca peste caraterul +
rez+=produs();
break;
case '-':
++cursor; //deplasam cursorul sa treaca peste caracterul -
rez-=produs();
break;
}
}
return rez;
}
long produs()
{
long rez=subexpresie();
while((*cursor == '*') || (*cursor == '/'))
{
switch(*cursor)
{
case '*':
++cursor; //deplasam cursorul sa treaca peste caracterul *
rez*=subexpresie();
break;
case '/':
++cursor; //deplasam cursorul sa treca peste caracterul /
rez/=subexpresie();
break;
}
}
return rez;
}
long subexpresie() //o subexpresie poate fi o paranteza sau un numar
{
long rez=0;//initializare rezultat
if( *cursor == '(' )
{
++cursor; //deplasam cursorul sa treca peste caracterul (
rez=adunare();
++cursor; //deplasam cursorul sa treaca peste caracterul )
}
else //avem un numar format din cifre
{
while((*cursor >= '0') && (*cursor <='9'))
{
rez=rez*10 + *cursor - '0';
++cursor;//trece la urmatoarea cifra
}
}
return rez;
}
int main()
{
FILE *inputFile, *outputFile;
inputFile=fopen("evaluare.in", "r");
outputFile=fopen("evaluare.out", "w");
fgets(sir,MAX_CARACTERE,inputFile);
fprintf(outputFile, "%ld", adunare());
return 0;
}