Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมค้นหาระดับบิตและช่วงของตัวเลขในช่วงที่กำหนดใน Python


สมมติว่าเรามีค่า start และ end สองค่า เราต้องหาค่าระดับบิต AND ของตัวเลขทั้งหมดในช่วง [start, end] (รวมทั้งสองค่า)

ดังนั้น หากอินพุตเป็นเหมือน start =8 end =12 เอาต์พุตจะเป็น 8 คือ 1,000 ในรูปแบบไบนารีและ 12 คือ 1100 ในรูปแบบไบนารี ดังนั้น 1,000 AND 1001 และ 1010 และ 1011 และ 1100 คือ 1,000 ซึ่งเท่ากับ 8

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • n :=end - start + 1
  • x :=0
  • สำหรับ b ในช่วง 31 ถึง 0, ลดลง 1 ทำ
    • ถ้า 2^b
    • ออกมาจากลูป
  • ถ้า 2^b AND start AND end ไม่ใช่ศูนย์ แล้ว
    • x :=x + (2^b)
  • ผลตอบแทน x
  • ตัวอย่าง

    ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

    def solve(start, end):
       n = end - start + 1
       x = 0
       for b in range(31, -1, -1):
          if (1 << b) < n:
             break
          if (1 << b) & start & end:
             x += 1 << b
       return x
    
    start = 8
    end = 12
    print(solve(start, end))

    อินพุต

    8, 12

    ผลลัพธ์

    8