ধরুন আমাদের একটি সংখ্যা সংখ্যা আছে। আমাদের এটিকে এর সমতুল্য রোমান সংখ্যায় রূপান্তর করতে হবে। রোমান সংখ্যায় নিচের মত চিহ্ন এবং মান থাকে −
- "I" =1
- "V" =5
- "X" =10
- "L" =50
- "C" =100
- "D" =500
- "M" =1000
এই চিহ্নগুলি সাধারণত সবচেয়ে বড় থেকে ছোট এবং বাম থেকে ডানে লেখা হয় এবং সমস্ত চিহ্নের মানগুলি যোগ করে গণনা করা যেতে পারে। কিন্তু কিছু বিশেষ ক্ষেত্রে আছে, যেখানে নিম্ন মানের একটি চিহ্ন উচ্চতর মানের প্রতীকের বাম দিকে থাকে, তার ইঙ্গিত হয় উচ্চতর থেকে নিম্ন মান বিয়োগ করা হয়েছে।
এই ধরনের ক্ষেত্রে উদাহরণ -
- "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" 1000 + 500 + 10 + 10 =1520 নির্দেশ করে।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- res :=ফাঁকা স্ট্রিং
- টেবিল =এই বিন্যাসে জোড়া (ভাল, চিহ্ন) সম্বলিত একটি তালিকা, যেখানে ভ্যাল হল মান এবং চিহ্ন হল সংশ্লিষ্ট চিহ্ন [(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 :=নম্বর/ক্যাপের তল
- m :=num mod cap
- res :=res + roman * d
- সংখ্যা :=মি
- রিটার্ন রিটার্ন
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
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