use std::error::Error;
fn to_base(mut n: u32, base: u32) -> Result<String, Box<dyn Error>> {
const DIGITS: &str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
if base < 2 || base > 36 {
return Err("Base must be between 2 and 36".into());
}
if n == 0 {
return Ok("0".to_string());
}
let mut result = String::new();
while n > 0 {
let remainder = (n % base) as usize;
result.push(DIGITS.chars().nth(remainder).unwrap());
n /= base;
}
let reversed: String = result.chars().rev().collect();
Ok(reversed)
}
fn main() -> Result<(), Box<dyn Error>> {
let number = 255;
for &base in &[2, 8, 16, 36] {
let converted = to_base(number, base)?;
println!("{} in base {} = {}", number, base, converted);
}
Ok(())
}
/*
run:
255 in base 2 = 11111111
255 in base 8 = 377
255 in base 16 = FF
255 in base 36 = 73
*/