ধরুন একটি সংখ্যা আছে। সংখ্যাটি ০ থেকে ২³¹-১ পর্যন্ত যেকোনো হতে পারে। আমাদের সংখ্যাটিকে শব্দে রূপান্তর করতে হবে। যেমন ৫১২ হলে ফলাফল হবে "Five hundred twelve"।
সমাধানের ধাপগুলো −
- কিছু লিস্ট সংজ্ঞায়িত করুন: less_than_20 (১ থেকে ১৯ পর্যন্ত শব্দ), tens (twenty, thirty... ninety), thousands (thousand, million, billion)
- helper() ফাংশন সংজ্ঞায়িত করুন যা n নেবে
- যদি n == 0 হলে খালি স্ট্রিং রিটার্ন করুন
- যদি n < 20 হলে less_than_20[n] + স্পেস রিটার্ন করুন
- যদি n < 100 হলে tens[n//10] + স্পেস + helper(n%10) রিটার্ন করুন
- অন্যথায় less_than_20[n//100] + "Hundred" + helper(n%100) রিটার্ন করুন
- মূল মেথড থেকে − যদি num == 0 হলে "Zero" রিটার্ন করুন
- ans := "", i := 0
- while num > 0 − যদি num%1000 != 0 হলে ans = helper(num%1000) + thousands[i] + " " + ans; num //= 1000; i++
- ans.strip() রিটার্ন করুন
উদাহরণ
নিচের ইমপ্লিমেন্টেশনটি দেখুন ভালো বোঝার জন্য −
class Solution(object):
less_than_20 = ["", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"]
tens = ["","Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"]
thousands = ["", "Thousand", "Million", "Billion"]
def numberToWords(self, num):
if num == 0:
return "Zero"
ans = ""
i = 0
while num > 0:
if num % 1000 != 0:
ans = self.helper(num % 1000) + Solution.thousands[i] + " " + ans
i += 1
num //= 1000
return ans.strip()
def helper(self, n):
if n == 0:
return ""
elif n < 20:
return Solution.less_than_20[n] + " "
elif n < 100:
return Solution.tens[n//10] + " " + self.helper(n % 10)
else:
return Solution.less_than_20[n // 100] + " Hundred " + self.helper(n % 100)
ob = Solution()
print(ob.numberToWords(512))
print(ob.numberToWords(7835271))
ইনপুট
512 7835271
আউটপুট
Five Hundred Twelve Seven Million Eight Hundred Thirty Five Thousand Two Hundred Seventy One