计数数字在C ++中以二进制表示形式全为1

我们给定一个正整数N。目标是对小于或等于N且二进制表示均为1的数字进行计数。例如1是1,3是11,7是111,15是1111 ...等等。

如果我们看到数字,那么它们全都是2i-1。我从1开始的地方。要检查小于n的数字。我们将比较2i-1 <= n。然后增加计数。

让我们通过示例来理解。

输入-N = 15

输出-二进制全为1的数字:4

说明-数字为相同质数的总和-数字为1 3 7 15

输入-N = 50

输出-二进制全为1的数字:5

说明-数字为相同质数的总和-

以下程序中使用的方法如下

  • 我们取一个正整数N.

  • 函数allOnes(int n)以n作为输入,并以二进制表示形式返回全为1的数字。

  • 对于此类数字,将初始变量计数设为0。

  • 使用for循环从i = 1遍历到i <= n。

  • 对于每个i,如果pow(2,i)-1小于或等于n。增量计数。

  • 在for循环结束时返回计数结果。

示例

#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