查找 C++ 中两个数字最左边的不同位的位置


在这个问题中,我们得到了两个数字,num1 和 num2。我们的任务是找到这两个数字最左边不同的位的位置。我们需要打印在各自二进制表示中,这两个数字第一个不相同的位。为了找到这个位,这两个数字的长度需要相同。这可以通过在位数较少的数字的开头添加 0 来实现。

让我们来看一个例子来理解这个问题:

输入

num1 = 4, num2 = 7

输出

1

解释

4 的二进制表示是 100

7 的二进制表示是 111

第一位不同。

解决方案

解决这个问题的一种方法是首先通过将其乘以 2(位差) 来使两个数字的位数相等。然后对两个数字进行异或运算,这将仅在它们的位不同的位置返回 1。因此,在这个异或结果中,我们将找到第一个位置,然后加 1 就得到了所需的位置。

算法

**步骤 1** - 通过仅将较小的数字乘以 (2 ^ (位长度差)) 来使数字的位数相等。

**步骤 2** - 对 num1 和 num2 执行异或运算。

**步骤 3** - 位差等于总计 (bitCount - XORbitCount + 1)。

程序说明了我们解决方案的工作原理:

示例

 在线演示

#include <iostream>
#include <math.h>
using namespace std;
int findmisMatchBit(int num1, int num2) {
   if (num1 == num2)
      return 0;
   int num1Size = floor(log2(num1)) + 1;
   int num2Size = floor(log2(num2)) + 1;
   int BitSizeDiff = abs(num1Size - num2Size);
   int maxBitSize = max(num1Size, num2Size);
   if (num1Size > num2Size)
      num2 *= pow(2, BitSizeDiff);
   else
      num1 *= pow(2, BitSizeDiff);
   int XOR = num1 ^ num2;
   int XORBitSize = floor(log2(XOR)) + 1;
   return (maxBitSize - XORBitSize + 1);
}
int main() {
   int num1 = 43, num2 = 765;
   cout<<"The position of leftmost dis-similar bit of the two
   number is "<<findmisMatchBit(num1, num2);
   return 0;
}

输出

The position of leftmost dis-similar bit of the two number is 4

更新于:2021年3月16日

162 次浏览

开始您的 职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.