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