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

โปรแกรมค้นหาการต่อเลขฐานสองที่ต่อเนื่องกันใน Python


สมมติว่าเรามีตัวเลข n เราต้องหาค่าทศนิยมของสตริงไบนารีโดยการต่อเลขฐานสองแทนค่า 1 ถึง n ตามลำดับ ถ้าคำตอบมีขนาดใหญ่เกินไป ให้ส่งคืนโมดูโลคำตอบ 10^9 + 7

ดังนั้น หากอินพุตมีค่าเท่ากับ n =4 เอาต์พุตจะเป็น 220 เพราะการต่อแทนค่าไบนารีจาก 1 ถึง 4 จะเป็น "1" + "10" + "11" + "100" =110111000 ค่านี้เป็นไบนารี แทน 220.

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

  • แทน :=1
  • ม :=10^9+7
  • สำหรับฉันในช่วง 2 ถึง n ทำ
    • ans :=เปลี่ยน ans (ความยาวบิตของ i) จำนวนครั้ง
    • ans :=(ans+i) mod m
  • คืนสินค้า

ตัวอย่าง

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

def solve(n):
   ans = 1
   m = (10**9+7)
   for i in range(2,n+1):
      ans = ans<<i.bit_length()
      ans = (ans+i) % m
   return ans

n = 4
print(solve(n))

อินพุต

4

ผลลัพธ์

220