第63题 幂次与位数
问题描述:
解题步骤
底数a肯定不能大于9,因为10的2次幂是100,已经超过2位数。
幂数要考虑退出循环的条件,比如:
当a=4, b=3时,4 ^ 3 = 64,只是2位数,当幂次增加时,它的位数永远不可能超过幂次,此时不需要再尝试更多的b,退出内层循环即可。
extern crate num_bigint;
use num_bigint::BigUint;
fn main() {
let mut count = 0;
for a in 1..=9 {
for b in 1.. {
let p = power(a, b).to_string();
if p.len() < b as usize {
// 位数永远不可能超过幂次了,退出内层循环
break;
}
if p.len() == b as usize {
count += 1;
println!("{}: {} ^ {} = {}", count, a, b, p);
}
}
}
println!("{}", count);
}
fn power(a: u64, b: u64) -> BigUint {
let mut p = BigUint::from(a);
for _i in 1..b {
p *= BigUint::from(a);
}
p
}