在 C++ 中计算长度为 N 且仅包含 0 和 1 的二进制字符串的数量

c++server side programmingprogramming更新于 2024/9/27 5:20:00

给定一个数字,假设为 num,任务是计算通过给定数字 num 可以形成的仅包含 o 和 1 的二进制字符串的数量。

二进制数系统是数字表示技术的一种。它在数字系统中最为流行和使用。二进制系统用于表示二进制数量,任何只有两种操作状态或可能条件的设备都可以表示二进制数量。例如,开关只有两种状态:打开或关闭。

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

例如

输入 − num = 3
输出 − 计数为 8

解释 长度为 3 的 − 二进制组合有:000、111、001、101、100、110、011、010,因为它们总共有 8 个,所以计数为 8。

输入 − num = 2
输出 − 计数为 4

解释 −长度为 2 的二进制组合有:00、11、01、10,因为它们总共有 4 个数字,因此计数为 4。

以下程序中使用的方法如下

  • 输入一个 long long 类型的数字,因为该数字可以是任何数字 long

  • 计算 mod 值为 (long long)(le9 + 7)

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

  • 声明一个临时变量来存储计数和另一个变量 temp,并用 2 初始化它。

  • 将 num 设置为 temp = temp % mod

  • 当 num > 0 时启动循环

  • 检查 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)
// 一个迭代函数,用于在 O(log y) 中查找 (x^y)%p
ll power(ll x, ll y, ll p){
   ll result = 1;
   x = x % p; // 如果 x 大于或等于 p,则更新 x
   // 等于 p
   while (y > 0){
      // 如果 y 为奇数,则将 x 与结果相乘
      if (y & 1){
         result = (result * x) % p;
      }
      // y 现在必须是偶数
      y = y >> 1; // y = y/2
      x = (x * x) % p;
   }
   return result;
}
// 计算二进制字符串数量的函数
ll countbstring(ll num){
   int count = power(2, num, mod);
   return count;
}
int main(){
   ll num = 3;
   cout <<"count is: "<<countbstring(num);
 return 0;
}

输出

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

计数为:8

相关文章