Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Chương trình C# kiểm tra biểu diễn nhị phân có phải Palindrome

Kiểm tra xem biểu diễn nhị phân của một số có đọc xuôi và ngược giống nhau (palindrome) hay không. Ví dụ: 5 = 101₂ → palindrome.

Thuật toán: Đảo bit (Bit Reversal)

  • Duyệt bit từ LSB (bit thấp) đến MSB (bit cao) của số gốc.
  • Xây số đảo ngược: dịch trái rev <<= 1, nếu bit gốc = 1 thì set bit thấp của rev rev ^= 1.
  • So sánh số gốc với số đảo. Nếu bằng nhau → palindrome.

Mã nguồn


using System;

public class Demo {
    // Đảo bit của số (chỉ các bit ý nghĩa, bỏ leading zeros)
    public static long ReverseBits(long num) {
        long rev = 0;
        while (num > 0) {
            rev <<= 1;              // Dịch trái rev để chừa chỗ cho bit mới
            if ((num & 1) == 1)     // Nếu bit thấp của num là 1
                rev ^= 1;           // Set bit thấp của rev = 1 (XOR với 1)
            num >>= 1;              // Dịch phải num để lấy bit tiếp theo
        }
        return rev;
    }
    
    public static bool IsBinaryPalindrome(long num) {
        long rev = ReverseBits(num);
        return num == rev;
    }
    
    public static void Main() {
        long num = 5; // 101 nhị phân
        if (IsBinaryPalindrome(num))
            Console.WriteLine("Palindrome Number");
        else
            Console.WriteLine("Not a Palindrome Number");
    }
}

Kết quả


Palindrome Number

Các số có nhị phân palindrome (≤ 100)

0  (0)
1  (1)
3  (11)
5  (101)
9  (1001)
15 (1111)
17 (10001)
21 (10101)
27 (11011)
31 (11111)
33 (100001)
45 (101101)
51 (110011)
63 (111111)
65 (1000001)
73 (1001001)
85 (1010101)
93 (1011101)
99 (1100011)

Lưu ý

  • Hàm ReverseBits bỏ qua leading zeros — 6 (110) đảo thành 3 (11) → không palindrome (đúng, vì 110 ≠ 011).
  • Nếu muốn tính cả leading zeros (ví dụ 8-bit: 00000110), cần biết bit-width cố định.
  • Dùng ulong cho 64-bit, tránh sign extension khi dịch phải.
  • .NET 5+: BitOperations.ReverseBits (hardware accelerated trên ARM/x64 hỗ trợ).