#include <stdio.h>
#include <math.h>
#include <string.h>
// return 1 if 2^n starts with prefix, else 0
int startsWithPrefix(long long n, int prefix) {
static const double log2v = log10(2.0);
double x = n * log2v;
double frac = x - floor(x);
// count digits in prefix
char buf[32] = "";
sprintf(buf, "%d", prefix);
int digits = strlen(buf);
// compute leading digits
int leading = (int) pow(10, frac + digits - 1);
return leading == prefix;
}
int main(void) {
int prefix = 12;
for (long long n = 1; ; n++) {
if (startsWithPrefix(n, prefix)) {
printf("First n = %lld\n", n);
printf("2 ^ %lld = %d\n", n, (int) pow(2, n));
break;
}
}
}
/*
run:
First n = 7
2 ^ 7 = 128
*/