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

หาจำนวนที่มากที่สุดน้อยกว่า X ที่มีบิตเซตสูงสุด K บิตใน C++

ในบทช่วยสอนนี้ เราจะเขียนโปรแกรมเพื่อหาจำนวนที่มากที่สุดซึ่งน้อยกว่าค่า X ที่กำหนด และมีบิตเซต (set bits) สูงสุด K บิต

ขั้นตอนการแก้ปัญหา

  • กำหนดค่าเริ่มต้นของตัวเลข x และ k
  • หาจำนวนบิตเซตในตัวเลข x
  • เขียนลูปที่วนรอบตามจำนวน (set bits ของ x - k)
    • อัปเดตค่า x ด้วยการคำนวณ x & (x - 1)
  • คืนค่า x

ตัวอย่างโค้ด

#include <bits/stdc++.h> 
using namespace std; 

int largestNumberWithKBits(int x, int k) { 
    int set_bit_count = __builtin_popcount(x); 
    if (set_bit_count <= k) { 
        return x; 
    } 
    int diff = set_bit_count - k; 
    for (int i = 0; i < diff; i++) { 
        x &= (x - 1); 
    } 
    return x; 
} 

int main() { 
    int x = 65, k = 2; 
    cout << largestNumberWithKBits(x, k) << endl; 
    return 0; 
}

ผลลัพธ์

หากรันโค้ดด้านบน จะได้ผลลัพธ์ดังนี้:

65

สรุป

หากมีข้อสงสัยเกี่ยวกับบทช่วยสอนนี้ สามารถถามได้ในส่วนความคิดเห็น