Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

นับจำนวนสตริงไบนารีความยาว N ที่ประกอบด้วย 0 และ 1 ใน C++

เราได้รับตัวเลขหนึ่งตัว ให้เรียกว่า num และงานคือคำนวณจำนวนสตริงไบนารีที่สามารถสร้างได้จากตัวเลข num ที่ประกอบด้วยแค่ 0 และ 1

ระบบเลขฐานสอง (Binary Number System) เป็นหนึ่งในเทคนิคการแทนค่าตัวเลข มันเป็นที่นิยมและใช้ในระบบดิจิทัล ระบบฐานสองใช้แทนปริมาณไบนารีที่สามารถแทนได้โดยอุปกรณ์ใดๆ ที่มีสถานะการทำงานเพียงสองสถานะหรือเงื่อนไขที่เป็นไปได้ ตัวอย่างเช่น สวิตช์มีสองสถานะ: เปิด หรือ ปิด

ในระบบฐานสอง มีเพียงสองสัญลักษณ์หรือค่าตัวเลขที่เป็นไปได้ คือ 0 และ 1 แทนโดยอุปกรณ์ใดๆ ที่มีสถานะการทำงานเพียง 2 สถานะ สตริงไบนารีคือสตริงที่มีค่าไบนารี คือ 0 หรือ 1

ตัวอย่าง

อินพุต – num = 3 เอาต์พุต – count is 8

คำอธิบาย – การจัดหมู่ไบนารีที่สามารถสร้างได้ความยาว 3 คือ: 000, 111, 001, 101, 100, 110, 011, 010 รวมทั้งหมด 8 แบบ ดังนั้น count คือ 8

อินพุต – num = 2 เอาต์พุต – count is 4

คำอธิบาย – การจัดหมู่ไบนารีที่สามารถสร้างได้ความยาว 2 คือ: 00, 11, 01, 10 รวมทั้งหมด 4 แบบ ดังนั้น count คือ 4

วิธีการที่ใช้ในโปรแกรมด้านล่าง

  • รับตัวเลขประเภท long long เนื่องจากตัวเลขอาจยาวเท่าไหร่ก็ได้
  • คำนวณค่า mod เป็น (long long)(1e9 + 7)
  • สร้างฟังก์ชันคำนวณจำนวน
  • ประกาศตัวแปรชั่วคราวเก็บจำนวน และอีกตัว temp เริ่มต้นที่ 2
  • ตั้งค่า num เป็น temp = temp % mod
  • เริ่มลูป while 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)

// ฟังก์ชันวนซ้ำหา (x^y)%p ใน O(log y)
ll power(ll x, ll y, ll p){
    ll result = 1;
    x = x % p;
    while (y > 0){
        if (y & 1){
            result = (result * x) % p;
        }
        y = y >> 1;
        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;
}

เอาต์พุต

count is: 8