在这个问题上,我们得到一个整数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