How to find the first power of 2 whose leading digits are 12 in C++

1 Answer

0 votes
#include <iostream>
#include <cmath>
#include <string>

// return 1 if 2^n starts with prefix, else 0 
bool startsWithPrefix(long long n, int prefix) {
    static const double log2 = std::log10(2.0);

    double x = n * log2;
    double frac = x - std::floor(x);

    int digits = std::to_string(prefix).size();
    int leading = (int) std::pow(10, frac + digits - 1);

    return leading == prefix;
}

int main() {
    int prefix = 12;

    for (long long n = 1; ; n++) {
        if (startsWithPrefix(n, prefix)) {
            std::cout << "First n = " << n << "\n";
            std::cout << "2 ^ " << n << " = " << std::pow(2, 7);
            break;
        }
    }
}



/*
run:

First n = 7
2 ^ 7 = 128

*/

 



answered 1 hour ago by avibootz
edited 1 hour ago by avibootz
...