This is mainly just for kicks and giggles, since it really won't work quite properly anyway, due to the lack of grapheme indexing. The next real thing is to... well, start from scratch.
34 lines
910 B
Rust
34 lines
910 B
Rust
pub fn digit_count(mut n: u32, b: u32) -> u32 {
|
|
let mut d = 0;
|
|
loop {
|
|
n /= b;
|
|
d += 1;
|
|
if n == 0 {
|
|
return d;
|
|
}
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
|
|
#[test]
|
|
fn digit_count_base_10() {
|
|
assert_eq!(digit_count(0, 10), 1);
|
|
assert_eq!(digit_count(9, 10), 1);
|
|
assert_eq!(digit_count(10, 10), 2);
|
|
assert_eq!(digit_count(99, 10), 2);
|
|
assert_eq!(digit_count(100, 10), 3);
|
|
assert_eq!(digit_count(999, 10), 3);
|
|
assert_eq!(digit_count(1000, 10), 4);
|
|
assert_eq!(digit_count(9999, 10), 4);
|
|
assert_eq!(digit_count(10000, 10), 5);
|
|
assert_eq!(digit_count(99999, 10), 5);
|
|
assert_eq!(digit_count(100000, 10), 6);
|
|
assert_eq!(digit_count(999999, 10), 6);
|
|
assert_eq!(digit_count(1000000, 10), 7);
|
|
assert_eq!(digit_count(9999999, 10), 7);
|
|
}
|
|
}
|