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
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP