C++中統計二進位制表示中所有1連續在一起的數字


給定一個正整數N。目標是統計小於或等於N且其二進位制表示中所有位都為1的數字。例如,1是1,3是11,7是111,15是1111……以此類推。

如果我們觀察這些數字,它們都是2i-1。其中i從1開始。要檢查小於n的此類數字,我們將比較2i-1<=n。然後遞增計數。

讓我們透過例子來理解。

輸入 − N=15

輸出 − 二進位制表示中所有位都為1的數字:4

說明 − 數字為相同素數的和 − 這些數字將是1、3、7、15

輸入 − N=50

輸出 − 二進位制表示中所有位都為1的數字:5

說明 − 數字為相同素數的和 −

下面程式中使用的演算法如下

  • 我們取一個正整數N。

  • 函式allOnes(int n)以n作為輸入,並返回二進位制表示中所有位都為1的數字。

  • 將初始變數count設定為0,用於表示此類數字。

  • 使用for迴圈遍歷從i=1到i<=n。

  • 對於每個i,如果pow(2,i)-1小於或等於n,則遞增count。

  • 在for迴圈結束時返回count作為結果。

示例

 線上演示

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

輸出

如果我們執行以上程式碼,它將生成以下輸出:

Number having all 1's in binary : 4

更新於:2020年10月31日

410 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.