fn decimal_to_hex_string(decimal: i32) -> String {
if decimal == 0 {
return "0".to_string();
}
let mut num = if decimal < 0 { -decimal as u32 } else { decimal as u32 };
let mut hex_chars = Vec::new();
while num > 0 {
let digit = num % 16;
hex_chars.push(match digit {
0...9 => (digit + b'0') as char,
10 => 'A',
11 => 'B',
12 => 'C',
13 => 'D',
14 => 'E',
15 => 'F',
_ => unreachable!()
});
num /= 16;
}
if decimal < 0 {
hex_chars.push('-');
}
hex_chars.into_iter().rev().collect()
}
fn main() {
let decimal = -42;
let hex_string = decimal_to_hex_string(decimal);
println!("{} in hexadecimal is: {}", decimal, hex_string);
}