মান লিজিয়ে আমাদের একটি সংখ্যা আছে যা অক্টেল (octal) বা ডেসিমেল (decimal) রূপে হতে পারে। যদি এটি অক্টেল রূপে থাকে তবে যাচাই করুন এটি প্যালিনড্রোম কিনা। যদি সংখ্যাটি ডেসিমেলে থাকে, তবে এটি অক্টেলে রূপান্তর করুন তারপর যাচাই করুন এটি প্যালিনড্রোম কিনা।
যেমন, ইনপুট যদি num = 178 হয়, তবে আউটপুট হবে True কারণ সংখ্যাটি অক্টেল রূপে নয় (৮ অক্টেলে বৈধ সিম্বল নয় কিন্তু ডেসিমেলে বৈধ), তাই এটি অক্টেলে রূপান্তর করলে ২৬২ হয় যা প্যালিনড্রোম।
সমাধানের ধাপসমূহ
base := 8যখনnum-এর সব অঙ্ক ৮-এর নিচে থাকে, অন্যথায় ১০oct_list :=একটি নতুন লিস্ট
<লি>যখন (num mod base)oct_list-এর শেষে ইনসার্ট করুনnum := num / base-এর ভাগফলj := oct_list-এর সাইজ - ১k := 0- যখন
k <= j, করুন:- যদি
oct_list[j]oct_list[k]সমান না হয়, তবে:Falseরিটার্ন করুন
j := j - 1, k := k + 1
- যদি
Trueরিটার্ন করুন
num ০ নয়, করুন:
উদাহরণ
বेहतर বোঝার জন্য নিচের বাস্তবায়নটি দেখুন:
def is_all_under_8(num):
while num:
if (num % 10) >= 8:
return False
else:
num = int(num / 10)
return True
def solve(num):
base = 8 if(is_all_under_8(num) == False) else 10
oct_list = []
while num != 0:
oct_list.append(num % base)
num = int(num / base)
j = len(oct_list)-1
k = 0
while k <= j:
if oct_list[j] != oct_list[k]:
return False
j-=1
k+=1
return True
num = 178
print(solve(num))
ইনপুট
178
আউটপুট
True