সমস্যা বিবরণ
একটি পূর্ণসংখ্যা N দেওয়া আছে। এই সংখ্যার মধ্যে যতগুলো ০ আছে, সবকে ৫ দিয়ে রিপ্লেস করতে হবে। তবে সংখ্যার শুরুতে থাকা লিডিং জিরো (Leading zeros) রিপ্লেস করা যাবে না (সেগুলো bỏ যায়)।
উদাহরণ
- ইনপুট-১: N = 1007 → আউটপুট: 1557 (দুইটি ০ → ৫)
- ইনপুট-২: N = 00105 → আউটপুট: 155 (লিডিং ০০ বাদ, মাঝপথের ০ → ৫)
সমাধানের পদ্ধতি (রিকার্সিভ / গাণিতিক)
- সংখ্যার শেষ ডিজিট বের করুন (
number % 10)। - যদি ০ হয়, তবে ৫ যোগ করুন (প্লেস ভ্যালু অনুযায়ী)।
- সংখ্যাকে ১০ দিয়ে ভাগ করুন (শেষ ডিজিট সরাতে) এবং প্লেস ভ্যালু ১০ গুন করুন।
- রিকার্সিভ বা লুপ দিয়ে পুরো সংখ্যা প্রসেস করুন।
পূর্ণ কোড উদাহরণ
def convertToFive(number):
# সংখ্যা ০ হলে স্পেশাল হ্যান্ডলিং
if number == 0:
return 5
result = 0
placeValue = 1
while number > 0:
digit = number % 10
if digit == 0:
result += 5 * placeValue
else:
result += digit * placeValue
number //= 10
placeValue *= 10
return result
# টেস্ট
print(convertToFive(14006)) # আউটপুট: 14556
print(convertToFive(1007)) # আউটপুট: 1557
print(convertToFive(105)) # আউটপুট: 155 (00105 ইনপুট দিলে পাইথন ১০৫ হিসেবে নিবে)
আউটপুট
14556
1557
155
বিকল্প পদ্ধতি: স্ট্রিং ম্যানিপুলেশন (সহজ)
def replace_zeros_str(n):
s = str(n)
# লিডিং জিরো বাদ দিয়ে বাকি ০কে ৫ করুন
return int(s.replace('0', '5'))
print(replace_zeros_str(14006)) # 14556
print(replace_zeros_str(1007)) # 1557
print(replace_zeros_str(105)) # 155
দ্রষ্টব্য: পাইথনে ইন্টিজার লিটেরাল হিসেবে 00105 লিখলে সিন্ট্যাক্স এরর হবে (অক্টাল ধরে নেয়)। স্ট্রিং ইনপুট নিলে লিডিং জিরো হ্যান্ডেল করা সহজ।