use std::fmt;
#[derive(Debug)] pub struct Number {
pub decimal: u32,
pub binary: String,
}
impl Number {
pub fn new(decimal_value: u32) -> Self {
Number {
decimal: decimal_value,
binary: Self::format_binary_with_separator(decimal_value),
}
}
fn format_binary_with_separator(n: u32) -> String {
let binary_string = format!("{:b}", n);
if binary_string.len() <= 4 {
return binary_string;
}
let mut result = String::new();
let chars: Vec<char> = binary_string.chars().rev().collect();
for (i, c) in chars.iter().enumerate() {
if i > 0 && i % 4 == 0 {
result.push('_');
}
result.push(*c);
}
result.chars().rev().collect()
}
}
impl fmt::Display for Number {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "10진수로: {}, 2진수로: {}", self.decimal, self.binary)
}
}