C++小於N的二進位制數計數


給定一個整數N作為輸入。目標是找到小於N且以二進位制形式表示的整數的個數。例如,如果輸入N為12,則小於12的數為1, 10, 11,它們是二進位制數,包含0和1作為數字。答案將是3。

例如

輸入

N=100

輸出

Count of Binary Digit numbers smaller than N are − 4

解釋

The Binary numbers less than 100 are − 1, 10, 11, 100

輸入

N=120

輸出

Count of Binary Digit numbers smaller than N are: 7

解釋

The Binary numbers less than 100 are : 1, 10, 11, 100, 101, 110, 111

下面程式中使用的方案如下

在這個方法中,我們將使用一個整數向量vec。首先我們將1壓入其中。現在要生成下一個二進位制數,我們將從vec中提取最後一個數字(temp)(最初為1)。然後使用以下方法生成下一個:temp*10和temp*10+1,因為二進位制數將始終為(1, 10, 11, 100, 110, 111……)。從vec中彈出數字,如果它小於N,則遞增計數。

  • 輸入一個整數N。

  • 函式Smaller_N(int N)接收N並返回小於N的二進位制數字的個數。

  • 將初始計數設定為0。

  • 取整數向量vec用於儲存僅包含0和1的整數。

  • 使用vec.push_back(1)將1新增到向量中。

  • 使用while迴圈遍歷vec[ ],取出最後壓入的元素作為temp= vec.back()。並將其從vec中移除。

  • 如果temp<=N,則遞增計數並生成下一個二進位制整數temp*10和temp*10+1,並將其新增到vec中。

  • 在while迴圈結束時,返回計數作為結果。

示例

 線上演示

#include <bits/stdc++.h>
using namespace std;
int Smaller_N(int N){
   int count = 0;
   vector<int> vec;
   vec.push_back(1);
   while (!vec.empty()){
      int temp = vec.back();
      vec.pop_back();
      if (temp <= N){
         count++;
         int temp_2 = temp * 10;
         vec.push_back(temp_2);
         vec.push_back(temp_2 + 1);
      }
   }
   return count;
}
int main(){
   int N = 1000;
   cout<<"Count of Binary Digit numbers smaller than N are: "<<Smaller_N(N);
   return 0;
}

輸出

如果我們執行上面的程式碼,它將生成以下輸出:

Count of Binary Digit numbers smaller than N are: 8

更新於:2021年1月5日

207 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告