Computer >> Máy Tính >  >> Lập trình >> C ++

Số trước đó giống như phần bổ sung của 1 trong C ++

Trong bài toán này, chúng ta được cung cấp một số nguyên n. Nhiệm vụ của chúng ta là kiểm tra thời tiết, số trước bằng phần bù của số 1.

Hãy lấy một vài ví dụ để hiểu vấn đề của chúng ta

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

Để giải quyết vấn đề này, chúng ta có thể sử dụng một phương pháp đơn giản là so sánh số trước đó và phần bù của số 1.

Cách làm này tuy đơn giản nhưng tốn không gian và thời gian. độ phức tạp về thời gian:O (n)

Một giải pháp hiệu quả có thể là sử dụng phương pháp chung mà chúng tôi tìm cách giải quyết vấn đề. Ở đây, chỉ số là lũy thừa của 2 sẽ thỏa mãn điều kiện, tức là số trước đó bằng phần bù của 1.

Chương trình cho thấy việc triển khai giải pháp của chúng tôi

Ví dụ

#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;
}

Đầu ra

Both are the same