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 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告