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

โปรแกรมแปลงจำนวนเต็มเป็นเลขโรมันใน Python


สมมติว่าเรามีตัวเลข เราต้องแปลงเป็นเลขโรมันที่เท่ากัน เลขโรมันประกอบด้วยสัญลักษณ์และค่าดังต่อไปนี้ -

  • "ฉัน" =1
  • "วี" =5
  • "X" =10
  • "L" =50
  • "C" =100
  • "D" =500
  • "M" =1,000

โดยทั่วไปแล้ว สัญลักษณ์เหล่านี้จะถูกเขียนจากมากไปหาน้อย และเรียงจากซ้ายไปขวา และสามารถคำนวณได้โดยการรวมค่าของสัญลักษณ์ทั้งหมด แต่มีบางกรณีพิเศษที่สัญลักษณ์ที่มีค่าต่ำกว่าอยู่ทางซ้ายของสัญลักษณ์ที่มีมูลค่าสูงกว่าของเขา แสดงว่าค่าที่ต่ำกว่านั้นถูกลบออกจากค่าที่สูงกว่า

นี่คือตัวอย่างกรณีดังกล่าว −

  • "I" อยู่ก่อน "V" ค่า 4
  • "I" อยู่ก่อน "X" ค่า 9
  • "X" อยู่ก่อน "L" ค่า 40
  • "X" อยู่ก่อน "C" ค่า 90
  • "C" อยู่ก่อน "D" ค่า 400.
  • "C" อยู่ก่อน "M" ค่า 900

ในเลขโรมันยังมีกฎอยู่สองสามข้อ –

  • ไม่มีสัญลักษณ์ซ้ำเกิน 3 ครั้ง
  • สัญลักษณ์ "V", "L" และ "D" ไม่ซ้ำกัน

ดังนั้น หากอินพุตเป็น n =1520 เอาต์พุตจะเป็น "MDXX" เนื่องจาก "MDXX" หมายถึง 1,000 + 500 + 10 + 10 =1520

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

  • res :=สตริงว่าง
  • ตาราง =รายการที่มีคู่ (val, symbol) ในรูปแบบนี้ โดยที่ val คือค่าและสัญลักษณ์คือสัญลักษณ์ที่เกี่ยวข้อง [(1000, "M"), (900, "CM"), (500, " D"), (400, "CD"), (100, "C"), (90, "XC"), (50, "L"), (40, "XL"), (10, "X" ), (9, "IX"), (5, "V"), (4, "IV"), (1, "I")]
  • สำหรับแต่ละคู่ (หมวก, โรมัน) ในตาราง ทำ
    • d :=ชั้นของ num/cap
    • m :=num mod cap
    • res :=res + โรมัน * d
    • num :=ม.
  • ผลตอบแทน

ตัวอย่าง

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

def solve(num):
   res = ""
   table = [
      (1000, "M"),
      (900, "CM"),
      (500, "D"),
      (400, "CD"),
      (100, "C"),
      (90, "XC"),
      (50, "L"),
      (40, "XL"),
      (10, "X"),
      (9, "IX"),
      (5, "V"),
      (4, "IV"),
      (1, "I"),
   ]
   for cap, roman in table:
      d, m = divmod(num, cap)
      res += roman * d
      num = m

   return res

num = 1520
print(solve(num))

อินพุต

1520

ผลลัพธ์

MDXX