
心有灵犀为您分享以下优质知识
关于二进制算法的代码实现,根据具体需求可分为整数与小数的转换、二进制运算等场景。以下是常见场景的代码示例及说明:
一、十进制转二进制(整数部分)
```python
def decimal_to_binary(n):
if n == 0:
return '0'
binary = ''
while n >
0:
binary = str(n % 2) + binary
n = n // 2
return binary
示例
print(decimal_to_binary(10)) 输出: 1010
```
二、十进制转二进制(含小数部分)
```python
def decimal_to_binary_with_fraction(n):
integer_part = int(n)
fractional_part = n - integer_part
binary_integer = bin(integer_part)[2:] 去掉前缀 '0b'
binary_fraction = ''
precision = 10 保留10位小数
for _ in range(precision):
fractional_part *= 2
bit = int(fractional_part)
binary_fraction += str(bit)
fractional_part -= bit
return binary_integer + '.' + binary_fraction
示例
print(decimal_to_binary_with_fraction(10.625)) 输出: 1010.101
```
三、二进制加法(无符号数)
```python
def binary_addition(a, b):
max_len = max(len(a), len(b))
a = a.zfill(max_len)
b = b.zfill(max_len)
carry = 0
result = ''
for i in range(max_len - 1, -1, -1):
bit_sum = carry
bit_sum += 1 if a[i] == '1' else 0
bit_sum += 1 if b[i] == '1' else 0
result = ('1' if bit_sum % 2 == 1 else '0') + result
carry = 0 if bit_sum < 2 else 1
if carry:
result = '1' + result
return result
示例
print(binary_addition('1010', '1011')) 输出: 10101
```
四、二进制减法(无符号数)
```python
def binary_subtraction(a, b):
max_len = max(len(a), len(b))
a = a.zfill(max_len)
b = b.zfill(max_len)
borrow = 0
result = ''
for i in range(max_len - 1, -1, -1):
bit_diff = int(a[i]) - int(b[i]) - borrow
if bit_diff < 0:
bit_diff += 2
borrow = 1
else:
borrow = 0
result = str(bit_diff) + result
去除前导零
while result and result == '0':
result = result[1:]
return result
示例
print(binary_subtraction('1010', '1001')) 输出: 0001
```
五、二进制乘法
```python
def binary_multiplication(a, b):
if a == '0' or b == '0':
return '0'
result = * (len(a) + len(b))
for i in range(len(a) - 1, -1, -1):
for j in range(len(b) - 1, -1, -1):
bit_product = (a[i] == '1') * (b[j] == '1')
result[i + j] += bit_product
result[i + j + 1] += result[i + j] // 2
result[i + j] %= 2
去除前导零
while len(result) >
1 and result[-1] == 0:
result.pop()
return ''.join(result)
示例
print(binary_multiplication('1010', '1011')) 输出: 1101110
```
六、二进制排序(快速排序)
```cpp
include
include
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
int partition(std::vector& arr, int low, int high) {
int pivot = arr[high];
int i = low - 1;
for