Pagini recente » Cod sursa (job #375810) | Monitorul de evaluare | Cod sursa (job #2242856) | Cod sursa (job #286818) | Cod sursa (job #148912)
Cod sursa(job #148912)
#include <stdio.h>
#include <string.h>
#define NMAX 100010
char s[NMAX];
int n;
int i;
long first();
long second();
long third();
long third()
{
int op = 1;
long nr = 0;
if(s[i] == '-')
{
op = -1;
++i;
}
if(s[i] == '+') ++i;
if(s[i] == '(')
{
++i;
nr = first();
++i;
return nr * op;
}
for(; s[i] >= '0' && s[i] <= '9' && i < n; )
{
nr = nr * 10 + (s[i] - '0');
++i;
}
return nr*op;
}
long second()
{
int res = third();
while(i < n && (s[i] == '*' || s[i] == '/'))
{
if(s[i] == '*')
{
++i;
res = res * third();
}
else
{
++i;
res = res / third();
}
}
return res;
}
long first()
{
long res = second();
int op;
while(i < n && (s[i] == '+' || s[i] == '-'))
{
if(s[i] == '-') op = -1;
else op = 1;
++i;
res += op * second();
}
return res;
}
int main()
{
freopen("evaluare.in", "r", stdin);
freopen("evaluare.out", "w", stdout);
scanf("%s", s);
n = strlen(s);
printf("%ld\n", first());
return 0;
}