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

โปรแกรมหาเลข m เพื่อให้มี n จำนวน 0s ต่อท้ายด้วย Python


สมมติว่าเรามีตัวเลข n เราต้องหาจำนวนที่น้อยที่สุด m โดยที่แฟคทอเรียลของ m มีจำนวน 0 เป็นอย่างน้อย n

ดังนั้นหากอินพุตเป็นเหมือน n =2 ผลลัพธ์จะเป็น 10 เพราะ 10! =3628800 และ 9! =362880 จำนวนขั้นต่ำที่มี 2 ศูนย์คือ 10

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

  • กำหนดฟังก์ชัน count_fives() นี่จะใช้เวลา n
  • cnt :=0
  • ในขณะที่ n> 0, ทำ
    • n :=ชั้นของ (n / 5)
    • cnt :=cnt + n
  • คืนสินค้า
  • จากวิธีหลัก ให้ทำดังต่อไปนี้ −
  • ซ้าย :=1
  • ขวา :=5^24
  • ขณะขวา-ซ้าย> 5 ทำ
    • กลาง :=ชั้นของ ((ขวา + ซ้าย) / 10) * 5
    • ห้า :=count_fives(กลาง)
    • ถ้า fives เหมือนกับ n แล้ว
      • ขวา :=กลาง
      • ซ้าย :=ขวา - 5
      • ออกมาจากวงจร
    • มิฉะนั้นเมื่อ fives
    • ซ้าย :=กลาง
  • มิฉะนั้น
    • ขวา :=กลาง
  • กลับขวา
  • ตัวอย่าง

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

    def count_fives(n):
       cnt = 0
       while n > 0:
          n = n // 5
          cnt += n
       return cnt
    
    def solve(n):
       left = 1
       right = 5**24
       while right - left > 5:
          mid = int((right + left) / 10) * 5
          fives = count_fives(mid)
          if fives == n:
             right = mid
             left = right - 5
             break
          elif fives < n:
             left = mid
          else:
             right = mid
       return right
    
    n = 2
    print(solve(n))

    อินพุต

    2
    

    ผลลัพธ์

    10