hexadecimal

1. Readme

十六进制

使用第一原理,将用字符串表示的十六进制数,(例如”10af8c”),转换为其十进制等效数(即,不可以使用内置或外部库来完成转换)。

在 Web 上,我们使用十六进制表示颜色,例如( green: 008000, teal: 008080, navy: 000080)。

程序应该处理无效十六进制字符串。

资源

计算机科学的所有http://www.wolframalpha.com/examples/NumberBases.html

2. 开始你的表演



3. 测试代码查看


# #![allow(unused_variables)]
#fn main() {
#[test]
fn test_hex_1_is_decimal_1() {
   assert_eq!(Some(1), hex_to_int("1"));
}

#[test]
//#[ignore]
fn test_hex_c_is_decimal_12() {
   assert_eq!(Some(12), hex_to_int("c"));
}

#[test]
//#[ignore]
fn test_hex_10_is_decimal_16() {
   assert_eq!(Some(16), hex_to_int("10"));
}

#[test]
//#[ignore]
fn test_hex_af_is_decimal_175() {
   assert_eq!(Some(175), hex_to_int("af"));
}

#[test]
//#[ignore]
fn test_hex_100_is_decimal_256() {
   assert_eq!(Some(256), hex_to_int("100"));
}

#[test]
//#[ignore]
fn test_hex_19ace_is_decimal_105166() {
   assert_eq!(Some(105166), hex_to_int("19ace"));
}

#[test]
//#[ignore]
fn test_invalid_hex_is_none() {
   assert_eq!(None, hex_to_int("carrot"));
}

#[test]
//#[ignore]
fn test_black() {
   assert_eq!(Some(0), hex_to_int("0000000"));
}

#[test]
//#[ignore]
fn test_white() {
   assert_eq!(Some(16777215), hex_to_int("ffffff"));
}

#[test]
//#[ignore]
fn test_yellow() {
   assert_eq!(Some(16776960), hex_to_int("ffff00"));
}

#}

4. 答案


# #![allow(unused_variables)]
#fn main() {
fn parse_hex_digit(c: char) -> Option<i64> {
   match c {
       '0' => Some(0),
       '1' => Some(1),
       '2' => Some(2),
       '3' => Some(3),
       '4' => Some(4),
       '5' => Some(5),
       '6' => Some(6),
       '7' => Some(7),
       '8' => Some(8),
       '9' => Some(9),
       'a' => Some(10),
       'b' => Some(11),
       'c' => Some(12),
       'd' => Some(13),
       'e' => Some(14),
       'f' => Some(15),
       _ => None,
   }
}

pub fn hex_to_int(string: &str) -> Option<i64> {
   let base: i64 = 16;

   string
       .chars()
       .rev()
       .enumerate()
       .fold(Some(0), |acc, (pos, c)| {
           parse_hex_digit(c).and_then(|n| acc.map(|acc| acc + n * base.pow(pos as u32)))
       })
}

#}



填充/相关