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


在这个问题中,我们给出了一个整数 n。我们的任务是检查前面的数字是否等于该数字的 1 的补码。

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

Input: 12
Output: No
Explanation: (12)10 = (1100)2
Preceding number 11 = (1011)2
1’s complement of 12 = (0011)2
Input: 4
Output: Yes
Explanation: 4 = (100)2
Preceding number 3 = (011)2
1’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

更新于: 03-Feb-2020

289 次浏览

职业快速入门

完成课程获得认证

开始
广告