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
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP