您是否知道少数可以从较大的数字借位?这是一个例子。假设我们的两个数字分别为5和14。首先,将它们写成二进制:
5 14
000101 001110
首先,我们从较大的数字中减去最小的on位,然后将其赋予其他数字中的最小off位。所以
This bit turns off
|
v
000101 001110
^
|
This bit turns on
现在我们有
000111 001100
我们的数字是7和12。第一个数字仍然较小,因此我们继续。
000111 001100
001111 001000
现在我们有15和8,所以我们可以停下来。我们将这组操作称为“借位”两个数字。让我们再举一个例子。20和61。
20 61
010100 111101
010101 111100
010111 111000
111111 100000
63 32
因此,我们最终的结果是32,63,让我们做一个更多。31和12。31已经大于12,因此无事可做!借位31和12不会产生31和12的变化。
挑战
您的挑战是编写一个接受两个数字并对其进行位借位的程序或函数。这两个数字将始终为正整数。您的输入和输出可以采用任何合理的格式。
测试IO:
Input: 2, 3
Output: 3, 2
Input: 3, 2
Output: 3, 2
Input: 8, 23
Output: 31, 0
Input: 42, 81
Output: 63, 0
Input: 38, 41
Output: 47, 32
Input: 16, 73
Output: 23, 0
Input: 17, 17
Output: 17, 17
存在标准漏洞,最短答案以字节为单位!