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 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告