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
*/