#include #include extern void registerme ( const char [] ); extern int evaluate ( unsigned int ); extern void verify ( unsigned int ); int findpeak () { int L, R, M, val1, val2; R = 1; while (1) { val1 = evaluate(R); val2 = evaluate(R+1); if (val1 > val2) break; R *= 32; } L = R / 32; while (L < R) { M = (L + R) / 2; val1 = evaluate(M); val2 = evaluate(M+1); if (val1 < val2) L = M + 1; else R = M; } return L; } int main ( int argc, char *argv[] ) { unsigned int n; if (argc == 1) registerme("99FB1331"); else registerme(argv[1]); n = findpeak(); verify(n); }