สมมติมีตัวเลขที่อยู่ในรูป Octal หรือ Decimal ถ้าเป็น Octal ตรวจสอบ Palindrome ทันที ถ้าเป็น Decimal แปลงเป็น Octal ก่อนแล้วค่อยตรวจสอบ
เช่น Input num = 178 Output True เพราะ 178 ไม่ใช่ Octal (มี 8) แปลงเป็น Octal ได้ 262 ซึ่งเป็น Palindrome
ขั้นตอนแก้:
- Base = 8 ถ้าตัวเลขทุกหลัก < 8 มิฉะนั้น Base = 10
- สร้าง List oct_list เก็บหลัก Octal โดย mod Base แล้วหาร Base ซ้ำ
- เช็ค Palindrome โดยเปรียบเทียบหัว-ท้ายของ List
ตัวอย่างโค้ด
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))
Input
178
Output
True