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

1 Answer

0 votes
use std::f64;

// return true if 2^n starts with prefix, else false
fn starts_with_prefix(n: i64, prefix: i32) -> bool {
    let log2v: f64 = f64::log10(2.0);

    let x: f64 = (n as f64) * log2v;
    let frac: f64 = x - x.floor();

    // count digits in prefix
    let buf: String = prefix.to_string();
    let digits: usize = buf.len();

    // compute leading digits
    let leading: i32 = (f64::powf(10.0, frac + (digits as f64) - 1.0).floor()) as i32;

    leading == prefix
}

fn main() {
    let prefix: i32 = 12;

    let mut n: i64 = 1;
    loop {
        if starts_with_prefix(n, prefix) {
            println!("First n = {}", n);
            println!("2 ^ {} = {}", n, (2_f64.powf(n as f64)) as i64);
            break;
        }
        n += 1;
    }
}


/*
run:

First n = 7
2 ^ 7 = 128

*/

 



answered 1 hour ago by avibootz

Related questions

...