计数数字在C ++中以二进制表示形式全为1
我们给定一个正整数N。目标是对小于或等于N且二进制表示均为1的数字进行计数。例如1是1,3是11,7是111,15是1111...等等。
如果我们看到数字,那么它们全都是2i-1。我从1开始的地方。要检查小于n的数字。我们将比较2i-1<=n。然后增加计数。
让我们通过示例来理解。
输入-N=15
输出-二进制全为1的数字:4
说明-数字为相同质数的总和-数字为13715
输入-N=50
输出-二进制全为1的数字:5
说明-数字为相同质数的总和-
以下程序中使用的方法如下
我们取一个正整数N.
函数allOnes(intn)以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