pub fn radix_encode(mut num: i64, radix: u32) -> Result<String, Box<dyn std::error::Error>> {
if num == 0 {
return Ok("0".to_string());
}
if radix < 2 || radix > 36 {
return Err("Radix must be between 2 and 36".into());
}
let mut result = String::new();
while num > 0 {
let digit = (num % radix as i64) as u32;
result.insert(0, std::char::from_digit(digit, radix).unwrap());
num /= radix as i64;
}
Ok(result)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_radix_encode() {
assert_eq!(radix_encode(0, 36).unwrap(), "0");
assert_eq!(radix_encode(10, 2).unwrap(), "1010"); assert_eq!(radix_encode(10, 8).unwrap(), "12"); assert_eq!(radix_encode(10, 10).unwrap(), "10"); assert_eq!(radix_encode(10, 16).unwrap(), "a"); assert_eq!(radix_encode(1024, 36).unwrap(), "sg"); assert_eq!(radix_encode(2000000, 36).unwrap(), "16v7k");
assert!(radix_encode(10, 1).is_err()); assert!(radix_encode(10, 37).is_err()); }
#[test]
fn test_radix_println() {
println!("{}", radix_encode(1741519768780, 36).unwrap());
}
}