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

Số đếm có tất cả các số 1 cùng nhau trong biểu diễn nhị phân trong C ++

Chúng ta được cho một số nguyên dương N. Mục đích là đếm các số nhỏ hơn hoặc bằng N có tất cả là 1 trong biểu diễn nhị phân của chúng. Ví dụ 1 là 1, 3 là 11, 7 là 111, 15 là 1111 ... cứ tiếp tục như vậy.

Nếu chúng ta thấy các số thì tất cả chúng đều là 2i-1. Nơi tôi bắt đầu từ 1. Để kiểm tra các số như vậy nhỏ hơn n. Chúng tôi sẽ so sánh nếu 2i-1 <=n. Sau đó, số lượng gia tăng.

Hãy cùng hiểu với các ví dụ.

Đầu vào - N =15

Đầu ra - Số có tất cả 1 trong nhị phân:4

Giải thích - Các số là tổng của các số nguyên tố giống nhau - Các số sẽ là 1 3 7 15

Đầu vào - N =50

Đầu ra - Số có tất cả các số 1 trong hệ nhị phân:5

Giải thích - Các số dưới dạng tổng của các số nguyên tố giống nhau -

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

  • Ta lấy một số nguyên dương N ..

  • Hàm allOnes (int n) nhận n làm đầu vào và trả về các số có tất cả là 1 trong biểu diễn nhị phân.

  • Lấy số lượng biến ban đầu là 0 cho những số như vậy ..

  • Di chuyển từ i =1 đến i <=n bằng vòng lặp for.

  • Với mỗi i, nếu pow (2, i) -1 nhỏ hơn hoặc bằng n. Số lượng tăng dần.

  • Trả về kết quả là kết quả ở cuối vòng lặp for.

Ví dụ

#include <bits/stdc++.h>
using namespace std;
int allOnes(int n){
   int count = 0;
   for(int i=1;i<=n;i++){
      if(n>=pow(2,i)-1){
         count++;
         //cout<<" "<<pow(2,i)-1;
      }
   }
   return count;
}
int main(){
   int N=23;
   cout <<endl<< "Number having all 1's in binary : "<<allOnes(N);
   return 0;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

Number having all 1's in binary : 4