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).