C++中计算区间[0, n]内仅有一个设置位数字的个数


给定一个数字,任务是计算从0到给定数字(例如,num)的范围内,恰好只有一个设置位的数字的个数。

二进制数中的设置位用1表示。当我们计算整数的二进制数时,它是由0和1组合而成的。因此,数字1在计算机术语中被称为设置位。

输入 − int num = 15

输出 − 区间[0, 15]内仅有一个设置位的数字个数为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个设置位, 9 -> 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, 4]内仅有一个设置位的数字个数为3

解释 − 给定数字为4,因此范围是0-4。现在计算4位二进制数为:

二进制数为:

0 -> 0000 = 0个设置位, 1 -> 0001 = 1个设置位, 2 -> 0010 = 1个设置位, 3 -> 0011 = 2个设置位, 4 -> 0100 = 1个设置位。现在,我们将选择恰好只有一个设置位的数字,它们是1、2和4。

下面程序中使用的方法如下

解决这个问题有多种方法,例如:朴素方法和高效方法。那么,让我们首先看看**朴素方法**。

  • 输入数字并将其传递给函数以进行进一步处理。

  • 使用临时变量count来存储范围内设置位恰好为1的数字的个数。

  • 从i=1开始循环到该数字。

  • 在循环内,使用' __builtin_popcount(i)' 设置一个临时变量,该函数返回设置位的个数。

  • 检查IF temp = 1,则递增计数。

  • 返回计数。

  • 打印结果。

高效方法

  • 输入数字并将其传递给函数以进行进一步处理。

  • 使用临时变量count来存储范围内设置位恰好为1的数字的个数。

  • 从temp开始循环,直到temp <= 数字。

  • 在循环内,将计数递增1并将temp设置为temp * 2。

  • 返回计数。

  • 打印结果。

示例(朴素方法)

 在线演示

#include <iostream>
using namespace std;
//function to Count of numbers having only 1 set bit in the range [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;
//function to Count of numbers having only 1 set bit in the range [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

更新于:2020年11月2日

浏览量 185

开启你的职业生涯

完成课程获得认证

开始学习
广告