จากตัวเลข เราต้องหาจำนวนศูนย์นำหน้าในการแทนค่าเลขฐานสองของมัน สมมติว่าบิตทั้งหมดเป็น 32 มาดูตัวอย่างกัน
ป้อนข้อมูล
5
ผลผลิต
25
การแทนค่าเลขฐานสองของ 5 คือ 00000...00101 จำนวนศูนย์นำหน้าคือ 29
อัลกอริทึม
- เริ่มต้นหมายเลข n.
- ค้นหาการแทนค่าไบนารีของ n
- ลบความยาวของการแสดงเลขฐานสองของ n จากจำนวนบิตทั้งหมดเช่น 32
- ส่งคืนผลลัพธ์
การนำไปใช้
ต่อไปนี้เป็นการนำอัลกอริธึมข้างต้นไปใช้ใน C++
#include <bits/stdc++.h>
using namespace std;
int getLeadingZeroesCount(unsigned int n) {
int totalBits = sizeof(n) * 8;
string binary = "";
while (n) {
int remainder = n % 2;
if (remainder || binary.length() > 0) {
binary += remainder;
}
n /= 2;
}
return totalBits - binary.length();
}
int main() {
int n = 101;
cout << getLeadingZeroesCount(n) << endl;
return 0;
} ผลลัพธ์
หากคุณเรียกใช้โค้ดด้านบน คุณจะได้ผลลัพธ์ดังต่อไปนี้
25