Pagini recente » Cod sursa (job #2952358) | Cod sursa (job #163826) | Cod sursa (job #2565028) | Cod sursa (job #417616) | Cod sursa (job #12205)
Cod sursa(job #12205)
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define NMAX 2000
char s[NMAX];
long n, i;
long max;
void read()
{
scanf("%s\n", s);
n = strlen(s);
}
long make_number()
{
long nr = 0;
while(isdigit(s[i]))
{
nr = nr * 10 + (s[i++]-'0');
}
return nr;
}
long solve()
{
long rez = 0;
while(i < n)
{
if(isdigit(s[i]))
{
if(isdigit(s[i]))
rez += make_number();
}
else if(s[i] == '-')
{
++i;
if(isdigit(s[i]))
rez -= make_number();
else if(s[i] == '(')
{
++i;
rez -= solve();
}
}
else if(s[i] == '+')
{
++i;
if(isdigit(s[i]))
rez += make_number();
else if(s[i] == '(')
{
++i;
rez += solve();
}
}
else if(s[i] == '*')
{
++i;
if(isdigit(s[i]))
rez *= make_number();
else if(s[i] == '(')
{
++i;
rez *= solve();
}
}
else if(s[i] == '/')
{
++i;
if(isdigit(s[i]))
rez /= make_number();
else if(s[i] == '(')
{
++i;
rez /= solve();
}
}
else if(s[i] == ')')
{
++i;
if(max < rez)
max = rez;
while(s[i] == '*' || s[i] == '/')
{
if(s[i] == '*')
{
++i;
if(isdigit(s[i]))
rez *= make_number();
else
rez *= solve();
}
else if(s[i] == '/')
{
++i;
if(isdigit(s[i]))
rez /= make_number();
else
rez /= solve();
}
}
break;
}
else if(s[i] == '(')
{
++i;
rez += solve();
}
}
if(i == n)
if(rez > max)
max = rez;
return rez;
}
int main()
{
freopen("max.in", "r", stdin);
freopen("max.out", "w", stdout);
read();
solve();
printf("%ld\n", max);
fclose(stdin);
fclose(stdout);
return 0;
}