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

ค้นหาจำนวน 1 บิตในเลขฐานสองขนาดใหญ่ใน C++


ให้หมายเลขไบนารีที่ไม่ได้ลงนามแบบ 32 บิต ภารกิจคือการนับชุดบิต กล่าวคือ มี '1 อยู่ในนั้น

ตัวอย่าง

ป้อนข้อมูล:

N = 00000000000000100111

ผลลัพธ์:

4

คำอธิบาย: ชุดบิตทั้งหมดที่มีอยู่ในหมายเลขที่ไม่ได้ลงนามที่ระบุคือ 4 ดังนั้นเราจะคืนค่าเอาต์พุตเป็น '4'

แนวทางในการแก้ปัญหานี้

เราได้ให้เลขฐานสอง 32 บิตที่ไม่ได้ลงนาม ภารกิจคือการนับว่ามี '1 อยู่ในนั้นกี่ตัว

ในการนับจำนวน '1' ที่มีอยู่ในเลขฐานสองที่กำหนด เราสามารถใช้ฟังก์ชัน STL ในตัว '__builin_popcount(n)' ซึ่งใช้เลขฐานสองเป็นพารามิเตอร์อินพุต

  • ใช้เลขฐานสอง N เป็นอินพุต
  • ฟังก์ชัน count1Bit(uint32_t n) รับเลขฐานสอง 32 บิตเป็นอินพุตและส่งกลับจำนวน '1' ที่มีอยู่ในเลขฐานสอง
  • ฟังก์ชัน inbuilt __builtin_popcount(n) รับอินพุตของ 'n' เป็นพารามิเตอร์และส่งกลับการนับ

ตัวอย่าง

#include<bits/stdc++.h>
using namespace std;
int count1bits(uint32_t n) {
   return bitset < 32 > (n).count();
}
int main() {
   uint32_t N = 0000000010100000011;
   cout << count1bits(N) << endl;
   return 0;
}

การเรียกใช้โค้ดด้านบนจะสร้างผลลัพธ์เป็น

ผลลัพธ์

4

ในจำนวนที่กำหนด มี 4 ชุดบิตหรือ '1s' อยู่ในนั้น ดังนั้นผลลัพธ์คือ '4'