在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