Cod sursa(job #479115)
#include <stdio.h>
#include <string.h>
using namespace std;
char e[100001];
int lg, i;
int eval ();
int termen ();
int factor ();
int is_number (char ch)
{
if (ch >= '0' && ch <= '9')
return 1;
return 0;
}
int factor ()
{
int r = 0;
if (e[i] == '(')
{
i ++;
r = eval ();
i ++;
}
else if (is_number (e[i]))
{
while (is_number (e[i]))
{
r = r * 10 + e[i] - '0';
i ++;
}
}
return r;
}
int termen ()
{
int r;
char ch;
r = factor ();
while (i < lg && e[i] == '*' || e[i] == '/')
{
ch = e[i];
i ++;
if (ch == '*')
r *= factor ();
else
r /= factor ();
}
return r;
}
int eval ()
{
int r;
char ch;
r = termen ();
while (i < lg && e[i] == '+' || e[i] == '-')
{
ch = e[i];
i ++;
if (ch == '+')
r += termen ();
else
r -= termen ();
}
return r;
}
int main ()
{
FILE *f = fopen ("evaluare.in","r");
FILE *g = fopen ("evaluare.out","w");
fscanf (f,"%s", e);
lg = strlen (e);
fprintf (g, "%d\n", eval ());
fclose (g);
fclose (f);
return 0;
}