কম্পিউটার টিউটোরিয়াল

পাইথনে ইন্টিজারকে রোমান নুমেরালে রূপান্তর করার প্রোগ্রাম

পাইথনে একটি সংখ্যা (num) কে এর সমতুল্য রোমান নুমেরাল (Roman numeral) এ রূপান্তর করার প্রোগ্রাম।

রোমান নুমেরালের সিম্বল ও মান

সিম্বলমান
I1
V5
X10
L50
C100
D500
M1000

বিশেষ নিয়ম (Subtractive Notation)

  • I, V-এর বামে -> 4 (IV)
  • I, X-এর বামে -> 9 (IX)
  • X, L-এর বামে -> 40 (XL)
  • X, C-এর বামে -> 90 (XC)
  • C, D-এর বামে -> 400 (CD)
  • C, M-এর বামে -> 900 (CM)

নિયমাবলী

  • কোনো সিম্বল ৩ বার ਤੋਂ বেশি রিপিট হয় না।
  • V, L, D রিপিট হয় না।
  • বড় থেকে ছোট সিম্বল বাম থেকে ডানে লেখা হয়।

এলগরিদম

  1. res = "" (ফলাফল স্ট্রিং)
  2. 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')]
  3. প্রতিটি (cap, roman) জোড়ার জন্য:
    • d, m = divmod(num, cap) (ভাগফল এবং ভাগশেষ)
    • res += roman * d
    • num = m
  4. res রিটার্ন করুন

পাইথন ইমপ্লিমেন্টেশন

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))  # Output: MDXX

ইনপুট

1520

আউটপুট

MDXX

ব্যাখ্যা

  • 1520 = 1000 (M) + 500 (D) + 10 (X) + 10 (X) = MDXX
  • divmod ফাংশন একসাথে ভাগফল এবং ভাগশেষ রিটার্ন করে, যা কোডকে সংক্ষিপ্ত করে।
  • টেবিলে সাবট্র্যাক্টিভ নোটেশন (900=CM, 400=CD, 90=XC, ইত্যাদি) ইতিমধ্যে অন্তর্ভুক্ত থাকায় আলাদা লজিক লাগে না।

সময় জটিলতা

O(1) — কারণ টেবিলের সাইজ স্থির (১৩ টি এন্ট্রি), ইনপুট সাইজের ওপর নির্ভরশীল নয়।

  1. পাইথন প্রোগ্রাম কিলোমিটারকে মাইলে কনভার্ট করা

  2. হেক্সাডেসিমেল স্ট্রিংকে দশমিকে রূপান্তর করার পাইথন প্রোগ্রাম

  3. পাইথনে ইন্টিজারকে ASCII ভ্যালুতে কনভার্ট কীভাবে করবেন?

  4. পাইথনে একক ক্যারেক্টারকে এর ইন্টিজার ভ্যালুতে কনভার্ট কীভাবে করবেন?