给我们一个数字,任务是计算范围为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