ในบทช่วยสอนนี้ เราจะเขียนโปรแกรมที่หาจำนวนที่มากที่สุดซึ่งน้อยกว่าที่กำหนด x และควรมีเซ็ตบิตสูงสุด k
มาดูขั้นตอนการแก้ปัญหากัน
- เริ่มต้นตัวเลข x และ k
- หาเซตบิตในจำนวน x
- เขียนลูปที่วนซ้ำ set bits count ของ 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
บทสรุป
หากคุณมีข้อสงสัยใดๆ ในบทแนะนำ โปรดระบุในส่วนความคิดเห็น