Cod sursa(job #792744)
#include <cstdio>
#define LGMAX 100003
using namespace std;
FILE *inFile = fopen ("evaluare.in", "r");
FILE *outFile = fopen ("evaluare.out", "w");
int i;
char s[LGMAX];
int term();
int factor();
int eval()
{
int res = term();
if (s[i] == '+' || s[i] == '-')
{
++i;
if (s[i - 1] == '+')
res += term();
else
res -= term();
}
return res;
}
int term()
{
int res = factor();
if (s[i] == '*' || s[i] == '/')
{
++i;
if (s[i - 1] == '*')
res *= factor();
else
res /= factor();
}
return res;
}
int factor()
{
int res = 0;
if (s[i] == '(')
{
++i;
res = eval();
++i;
}
else
while (s[i] >= '0' && s[i] <= '9')
{
res = res * 10 + s[i] - '0';
++i;
}
return res;
}
int main()
{
fgets (s, LGMAX, inFile);
fprintf (outFile, "%d\n", eval());
return 0;
}