Cod sursa(job #754782)
| Utilizator | Data | 3 iunie 2012 13:46:15 | |
|---|---|---|---|
| Problema | Evaluarea unei expresii | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 1.61 kb |
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
#define nmax 100010
char s[nmax], *p = s;
long prod();
long par();
long eval()
{
long r = prod();
while(*p == '+' || *p == '-')
{
switch(*p)
{
case '+':
++p;
r += prod();
break;
case '-':
++p;
r -= prod();
break;
}
}
return r;
}
long prod()
{
long r = par();
while(*p == '*' || *p == '/')
{
switch(*p)
{
case '*':
++p;
r *= par();
break;
case '/':
++p;
r /= par();
break;
}
}
return r;
}
long par()
{
long r = 0;
if(*p == '(')
{
++p;
r = eval();
++p;
}else
{
while(*p >= '0' && *p <= '9')
{
r = r * 10 + *p - '0';
++p;
}
}
return r;
}
int main()
{
freopen("evaluare.in", "r", stdin);
freopen("evaluare.out", "w", stdout);
fgets(s, nmax, stdin);
printf("%ld\n", eval());
int i;
scanf("%i", &i);
return 0;
}
