用C++计算长度为N的二进制字符串个数,其中只有0和1


假设给定一个数字,例如num,任务是计算可以使用给定数字num形成的二进制字符串的个数,这些字符串只包含0和1。

二进制数制是一种数的表示方法。它是数字系统中最流行的一种,广泛用于数字系统中。二进制系统用于表示二进制量,这些量可以用任何只有两种工作状态或可能条件的设备来表示。例如,开关只有两种状态:开或关。

在二进制系统中,只有两个符号或可能的数字值,即0和1。由任何只有2种工作状态或可能条件的设备表示。二进制字符串是包含二进制值的字符串,即只有0或1。

例如

Input − num = 3
Output − count is 8

说明 − 长度为3的二进制组合有:000、111、001、101、100、110、011、010,共有8个,因此个数为8。

Input − num = 2
Output − count is 4

说明 − 长度为2的二进制组合有:00、11、01、10,共有4个,因此个数为4。

下面程序中使用的算法如下:

  • 输入一个长整型数字,因为数字可以是任意位数。

  • 计算模值 (long long)(le9 + 7)

  • 创建一个函数来计算个数。

  • 声明一个临时变量来存储计数,另一个变量temp并将其初始化为2。

  • 设置num为 temp = temp % mod

  • 开始循环,直到num > 0

  • 检查IF num & 1,则将count设置为 (count * temp)% mod

  • 设置 num = num >> 1

  • 设置 temp = (temp * temp) % mod

  • 返回count

  • 打印结果。

示例

 在线演示

#include <iostream>
using namespace std;
#define ll long long
#define mod (ll)(1e9 + 7)
// An iterative function to find (x^y)%p in O(log y)
ll power(ll x, ll y, ll p){
   ll result = 1;
   x = x % p; // Update x if it is more than or
   // equal to p
   while (y > 0){
      // If y is odd, multiply x with result
      if (y & 1){
         result = (result * x) % p;
      }
      // y must be even now
      y = y >> 1; // y = y/2
      x = (x * x) % p;
   }
   return result;
}
// Function to count the number of binary strings
ll countbstring(ll num){
   int count = power(2, num, mod);
   return count;
}
int main(){
   ll num = 3;
   cout <<"count is: "<<countbstring(num);
   return 0;
}

输出

如果运行上述代码,我们将得到以下输出:

count is: 8

更新于:2020年5月15日

462 次查看

开启你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.