C++中与1的补码相同的前一个数字

在这个问题上,我们得到一个整数n。我们的任务是检查天气前面的数字是否等于数字的1的补码。

让我们举几个例子来了解我们的问题

Input: 12
Output: No
Explanation: (12)10 = (1100)2Preceding number 11 = (1011)21’s complement of 12 = (0011)2Input: 4
Output: Yes
Explanation: 4 = (100)2Preceding number 3 = (011)21’s complement of 12 = (011)2

要解决此问题,我们可以使用一种简单的方法,即比较前一个数字和该数字的1的补码。

这种方法很简单,但会占用空间和时间。时间复杂度:O(n)

一个有效的解决方案可能是使用我们寻求解决该问题的通用方法。在这里,只有2的幂的数字将满足条件,即先前的数字等于1的补数。

显示我们解决方案实施情况的程序

示例

#include <iostream>
using namespace std;
bool sameBits(unsigned long int n){
   if ((n & (n - 1)) == 0)
      return true;
   return false;
}
int main(){
   unsigned long int n = 64;
   if(sameBits(n))
      cout<<"Both are the same";
   else
      cout<<"Both aren't the same";
   return 0;
}

输出结果

Both are the same