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
广告