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

Tích hai số nhị phân trong C#

Nhân hai số nhị phân biểu diễn dưới dạng số nguyên thập phân (ví dụ: 11100 × 10001). Thuật toán: duyệt bit của số thứ 2, nếu bit=1 thì cộng số thứ 1 dịch trái tương ứng.

Ví dụ minh họa

using System;

class Program
{
    static long MultiplyBinary(long val1, long val2)
    {
        long result = 0;
        long factor = 1;
        
        while (val2 != 0)
        {
            int digit = (int)(val2 % 10);
            if (digit == 1)
            {
                result = AddBinary(result, val1 * factor);
            }
            val2 /= 10;
            factor *= 10;
        }
        return result;
    }
    
    // Hàm cộng nhị phân từ bài trước
    static long AddBinary(long a, long b)
    {
        long[] sum = new long[64];
        int i = 0, carry = 0;
        while (a != 0 || b != 0)
        {
            sum[i++] = (a % 10 + b % 10 + carry) % 2;
            carry = (int)((a % 10 + b % 10 + carry) / 2);
            a /= 10; b /= 10;
        }
        if (carry != 0) sum[i++] = carry;
        long res = 0;
        while (i > 0) res = res * 10 + sum[--i];
        return res;
    }
    
    static void Main()
    {
        long val1 = 11100; // 28
        long val2 = 10001; // 17
        
        Console.WriteLine($"Nhị phân 1: {val1}");
        Console.WriteLine($"Nhị phân 2: {val2}");
        Console.WriteLine($"Tích: {MultiplyBinary(val1, val2)}"); // 111011100 = 476
    }
}

Kết quả đầu ra

Nhị phân 1: 11100
Nhị phân 2: 10001
Tích: 111011100

Kiểm tra: 28 × 17 = 476. 476 decimal = 111011100₂. ✓

Cách đơn giản hơn: Chuyển sang int, nhân, chuyển lại: Convert.ToString(Convert.ToInt32(s1,2) * Convert.ToInt32(s2,2), 2).