在C ++中,只有1个置位的数字在[0,n]范围内
给我们一个数字,任务是计算范围为0到给定数字的数字计数,比如说num恰好有一个设定位
二进制数中的设置位用1表示。每当我们计算一个整数值的二进制数时,它就会形成为0和1的组合。因此,数字1在计算机方面称为设置位。
输入-int num = 15
输出-在[0,15]范围内只有1置位的位数为-4
说明-给定的数字是15,因此范围是0-15。现在计算4位数
的二进制数-
0-> 0000 = 0设置位,1-> 0001 = 1设置位,2-> 0010 = 1设置位,3-> 0011 = 2设置位,4-> 0100 = 1设置位,5-> 0101 = 2个设置位,6-> 0110 = 2个设置位,7-> 0111 = 3个设置位,8-> 1000 = 1设置位,1-> 1001 = 2个设置位,10-> 1010 = 2个设置位,11 -> 1011 = 3个设置位,12-> 1100 = 2个设置位,13-> 1101 = 3个设置位,14-> 1110 = 3个设置位,15-> 1111 = 4个设置位 现在,我们将选择仅具有一个设置位的数字,它们分别是1、2、4和8。
输入-int num = 4
输出-在[0,15]范围内只有1置位的位数为-3
说明-给定的数字是4,因此范围是0-4。现在计算4位二进制
-的编号
0-> 0000 = 0设置位,1-> 0001 = 1设置位,2-> 0010 = 1设置位,3-> 0011 = 2设置位,4-> 0100 = 1设置位。现在,我们将选择仅具有一个设置位的数字,即1、2和4。
以下程序中使用的方法如下
解决给定问题的方法可以有多种,即幼稚方法和有效方法。因此,让我们首先来看一下幼稚的方法。
输入数字并将其传递给函数进行进一步处理。
进行临时变量计数,以将设置的位正好为1的范围内的数字计数存储
从i到1开始循环直到数字
在循环内部,使用'__builtin_popcount(i)'设置一个临时变量,该函数返回设置的位数。
检查IF temp = 1然后增加计数
返回计数
打印结果
高效的方法
输入数字并将其传递给函数进行进一步处理。
进行临时变量计数,以将设置的位正好为1的范围内的数字计数存储
从温度开始直到温度<=数字时开始循环
在循环内部,将计数增加1并将temp设置为temp * 2
返回计数
打印结果
示例(幼稚的方法)
#include <iostream>using namespace std;
//函数对仅具有1设置位的数字进行计数[0,n]
int set_bits(int number){
int count = 0;
for (int i = 1; i <= number; i++){
int temp = __builtin_popcount(i);
if (temp == 1){
count++;
}
}
return count;
}
int main(){
int number = 15;
cout<<"Count of numbers having only 1 set bit in the range [0, "<<number<<"] are: "<<set_bits(number);
return 0;
}
输出结果
如果我们运行上面的代码,它将生成以下输出-
Count of numbers having only 1 set bit in the range [0, 15] are: 4
示例(有效方法)
#include <iostream>using namespace std;
//函数对仅具有1设置位的数字进行计数[0,n]
int set_bits(int number){
int count = 0;
int temp = 1;
while(temp <= number){
count++;
temp = temp *2;
}
return count;
}
int main(){
int number = 15;
cout<<"Count of numbers having only 1 set bit in the range [0, "<<number<<"] are: "<<set_bits(number);
return 0;
}
输出结果
如果我们运行上面的代码,它将生成以下输出-
Count of numbers having only 1 set bit in the range [0, 15] are: 4
以上是 在C ++中,只有1个置位的数字在[0,n]范围内 的全部内容, 来源链接: utcz.com/z/334915.html