查找 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
广告
数据结构
网络
关系型数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP