สมมติว่าเรามีจำนวนไม่มีเครื่องหมาย x และเราสามารถหาการแทนค่าทศนิยมสอง (32-bit unsigned integer) ได้ง่ายๆ ภารกิจของเราคือกลับบิต เช่นถ้าการแทนค่าทศนิยมสองเป็น 00000000000000000000001001110100 บิตที่กลับแล้วจะเป็น 00101110010000000000000000000000 เราต้องคืนค่าตัวเลขจริงหลังจากกลับบิต
วิธีการแก้ปัญหา
- สมมติ n คือตัวเลขที่กำหนด
- ให้ answer := 0
- สำหรับ i := 31 ลงถึง 0:
- answer := answer OR (n AND 1), และเลื่อนซ้าย i ครั้ง
- n := n หลังเลื่อนขวา 1 บิต
- คืนค่า answer
ตัวอย่างโค้ด
#includeusing namespace std; class Solution { public: uint32_t reverseBits(uint32_t n) { uint32_t ans = 0; for(int i = 31; i >= 0; i--){ ans |= (n & 1) << i; n >>= 1; } return ans; } }; int main(){ Solution ob; cout << ob.reverseBits(0b00000000000000000000001001110100); }
อินพุต
0b00000000000000000000001001110100
เอาต์พุต
775946240