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

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.