สมมติว่าเรามีตัวเลข n เราต้องเช็คว่าตัวเลขนั้นมีแค่ 2 set bit ที่ตำแหน่งแรกและตำแหน่งสุดท้ายหรือไม่
ดังนั้น หากอินพุตเป็น n =17 เอาต์พุตจะเป็น True เนื่องจากการแสดงเลขฐานสองของ n คือ 10001 มีเพียง 1 สองตัวที่ตำแหน่งแรกและตำแหน่งสุดท้าย
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ถ้า n เหมือนกับ 1 แล้ว
- คืนค่า True
- คืนค่า จริง ถ้า n - 1 ยกกำลัง 2 มิฉะนั้น เท็จ
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
โค้ดตัวอย่าง
def is_pow_of_two(n): return (n & n-1) == 0 def solve(n): if n == 1: return True return is_pow_of_two (n-1) n = 17 print(solve(n))
อินพุต
17
ผลลัพธ์
True