Home Photos Games Read Others Ambrose yongxu 's blog, life and learn

leetcode常用方法推荐

Word count: 1.8kReading time: 7 min
2025/01/01
loading

python

进制转换

  1. 使用内置函数bin()
    • bin()函数是Python 3中用于将十进制整数转换为二进制字符串的内置方法。
    • 示例:
      1
      2
      3
      decimal_num = 10
      binary_num = bin(decimal_num)
      print(binary_num)
    • 输出结果是0b1010。这里的0b是二进制数的前缀,用于标识这是一个二进制表示。如果只想获取纯粹的二进制数字部分,可以使用[2:]切片操作来去除前缀,例如binary_num = bin(decimal_num)[2:],这样输出的就是1010
  2. 除2取余法(手动实现)
    • 原理:将十进制数不断除以2,记录每次的余数,直到商为0。然后将余数从右到左排列,就得到了对应的二进制数。
    • 示例代码:
      1
      2
      3
      4
      5
      6
      7
      decimal_num = 10
      binary_str = ""
      while decimal_num > 0:
      remainder = decimal_num % 2
      binary_str = str(remainder)+binary_str
      decimal_num = decimal_num // 2
      print(binary_str)
    • 首先,通过decimal_num % 2获取余数,将余数转换为字符串后添加到binary_str的左边(这样才能保证最后得到的二进制数顺序正确)。然后,通过decimal_num = decimal_num // 2更新十进制数,用于下一轮计算。当decimal_num为0时,循环结束,此时binary_str中存储的就是转换后的二进制数。

Rust

进制转换

  1. 十进制转二进制

    • 方法一:使用format!宏与二进制格式说明符b
      • Rust有强大的格式化宏format!,它类似于println!,但它是将格式化后的内容作为字符串返回,而不是打印出来。可以使用b格式说明符将十进制数转换为二进制字符串。
      • 示例:
        1
        2
        3
        let decimal_num = 10;
        let binary_num = format!("{:b}", decimal_num);
        println!("{} in decimal is {} in binary", decimal_num, binary_num);
      • 在这个示例中,{:b}是格式说明符,它告诉format!宏将decimal_num转换为二进制格式。变量binary_num将存储转换后的二进制字符串,然后通过println!打印出十进制数和对应的二进制表示。
    • 方法二:手动实现除2取余法
      • 这种方法类似于在其他编程语言中手动实现十进制到二进制的转换。不断地将十进制数除以2,记录余数,直到商为0。然后将余数从右到左组合起来,就得到了二进制表示。
      • 示例:
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        fn decimal_to_binary(decimal_num: u32) -> String {
        let mut binary_str = String::new();
        let mut num = decimal_num;
        while num > 0 {
        let remainder = num % 2;
        binary_str = remainder.to_string() + &binary_str;
        num = num / 2;
        }
        binary_str
        }
        let decimal_num = 10;
        let binary_num = decimal_to_binary(decimal_num);
        println!("{} in decimal is {} in binary", decimal_num, binary_num);
      • decimal_to_binary函数中,首先创建一个空字符串binary_str用于存储二进制数字。然后进入循环,每次计算num除以2的余数remainder,将余数转换为字符串后与binary_str拼接(注意是余数在前,因为是从低位到高位构建二进制字符串)。接着更新num为商的值。当num为0时,循环结束,函数返回binary_str作为二进制表示。
  2. 二进制转十进制

    • 方法一:使用parse方法与二进制基数说明符_2
      • Rust的字符串类型String&str提供了parse方法,可以用于将字符串解析为其他类型。对于二进制转十进制,可以使用_2基数说明符来指定字符串是二进制表示,然后将其解析为十进制数。
      • 示例:
        1
        2
        3
        4
        5
        6
        let binary_num = "1010";
        if let Ok(decimal_num) = u32::from_str_radix(binary_num, 2) {
        println!("{} in binary is {} in decimal", binary_num, decimal_num);
        } else {
        println!("Invalid binary number");
        }
      • 在这个示例中,u32::from_str_radix(binary_num, 2)尝试将binary_num作为二进制字符串解析为u32类型的十进制数。如果解析成功,Ok(decimal_num)模式匹配成功,就可以打印出二进制数和对应的十进制表示;如果解析失败(例如binary_num包含非0或1的字符),则会执行else分支。
    • 方法二:手动实现位权展开法
      • 根据二进制数的位权展开式来计算对应的十进制数。对于二进制数b_n b_{n - 1}...b_1 b_0,其十进制值为b_n×2^n + b_{n - 1}×2^{n - 1}+...+b_1×2^1 + b_0×2^0
      • 示例:
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        fn binary_to_decimal(binary_num: &str) -> u32 {
        let mut decimal_num = 0;
        let mut power = 1;
        for digit in binary_num.chars().rev() {
        if digit == '1' {
        decimal_num += power;
        }
        power *= 2;
        }
        decimal_num
        }
        let binary_num = "1010";
        let decimal_num = binary_to_decimal(binary_num);
        println!("{} in binary is {} in decimal", binary_num, decimal_num);
      • binary_to_decimal函数中,首先初始化decimal_num为0(用于存储十进制结果)和power为1(用于表示当前位的位权,从最低位开始为1,然后每次乘以2)。然后通过for digit in binary_num.chars().rev()反向遍历二进制字符串中的每个字符。如果字符是1,就将power的值累加到decimal_num中。接着更新power的值,使其表示下一位的位权。最后返回decimal_num作为十进制结果。
  3. 其他进制转换(以十六进制为例)

    • 十进制转十六进制
      • **使用format!宏与十六进制格式说明符xX**:
        • x会将数字转换为小写字母的十六进制表示,X会转换为大写字母的十六进制表示。
        • 示例:
          1
          2
          3
          4
          5
          let decimal_num = 255;
          let hexadecimal_num_lower = format!("{:x}", decimal_num);
          let hexadecimal_num_upper = format!("{:X}", decimal_num);
          println!("{} in decimal is {} in hexadecimal (lowercase) and {} in hexadecimal (uppercase)",
          decimal_num, hexadecimal_num_lower, hexadecimal_num_upper);
        • 输出结果为255 in decimal is ff in hexadecimal (lowercase) and FF in hexadecimal (uppercase)
      • 手动实现除16取余法(类似十进制转二进制)
        • 不断地将十进制数除以16,记录余数,直到商为0。余数范围是0 - 15,对于大于9的余数,用字母A - F(或a - f)表示。
        • 示例:
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          fn decimal_to_hexadecimal(decimal_num: u32) -> String {
          let mut hexadecimal_str = String::new();
          let mut num = decimal_num;
          let hex_chars = ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'];
          while num > 0 {
          let remainder = num % 16;
          hexadecimal_str = hex_chars[remainder as usize].to_string() + &hexadecimal_str;
          num = num / 16;
          }
          hexadecimal_str
          }
          let decimal_num = 255;
          let hexadecimal_num = decimal_to_hexadecimal(decimal_num);
          println!("{} in decimal is {} in hexadecimal", decimal_num, hexadecimal_num);
    • 十六进制转十进制
      • **使用parse方法与十六进制基数说明符_16**:
        • 示例:
          1
          2
          3
          4
          5
          6
          let hexadecimal_num = "FF";
          if let Ok(decimal_num) = u32::from_str_radix(hexadecimal_num, 16) {
          println!("{} in hexadecimal is {} in decimal", hexadecimal_num, decimal_num);
          } else {
          println!("Invalid hexadecimal number");
          }
      • 手动实现位权展开法(类似二进制转十进制)
        • 对于十六进制数h_n h_{n - 1}...h_1 h_0,其十进制值为h_n×16^n + h_{n - 1}×16^{n - 1}+...+h_1×16^1 + h_0×16^0
        • 示例:
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          fn hexadecimal_to_decimal(hexadecimal_num: &str) -> u32 {
          let mut decimal_num = 0;
          let mut power = 1;
          for digit in hexadecimal_num.chars().rev() {
          let value: u32;
          match digit {
          '0'..='9' => value = digit.to_digit(10).unwrap(),
          'a'..='f' => value = 10 + (digit as u8 - 'a' as u8) as u32,
          'A'..='F' => value = 10 + (digit as u8 - 'A' as u8) as u32,
          _ => return 0,
          }
          decimal_num += value * power;
          power *= 16;
          }
          decimal_num
          }
          let hexadecimal_num = "FF";
          let decimal_num = hexadecimal_to_decimal(hexadecimal_num);
          println!("{} in hexadecimal is {} in decimal", hexadecimal_num, decimal_num);
CATALOG
  1. 1. python
    1. 1.1. 进制转换
  2. 2. Rust
    1. 2.1. 进制转换