สมมติว่าเรามีตัวเลขที่เป็นฐานแปดหรือทศนิยม หากอยู่ในรูปแบบฐานแปด ให้ตรวจสอบว่าเป็นพาลินโดรมหรือไม่ หากตัวเลขเป็นทศนิยมให้แปลงเป็นฐานแปดแล้วตรวจสอบว่าเป็นพาลินโดรมหรือไม่
ดังนั้น หากอินพุตเท่ากับ num =178 ผลลัพธ์จะเป็น True เนื่องจากตัวเลขไม่อยู่ในรูปแบบฐานแปด (8 ไม่ใช่สัญลักษณ์ที่ถูกต้องในฐานแปด แต่ใช้ได้เป็นฐานสิบ) จากนั้นแปลงเป็นฐานแปดซึ่งเท่ากับ 262 และนี่คือ พาลินโดรม.
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ฐาน :=8 เมื่อตัวเลขทั้งหมดของ num ต่ำกว่า 8 มิฉะนั้น 10
- oct_list :=รายการใหม่
- ในขณะที่ num ไม่ใช่ 0, do
- แทรก (ฐาน num mod) ที่ส่วนท้ายของ oct_list
- num :=ผลหารของ (num / base)
- j :=ขนาดของ oct_list - 1
- k :=0
- ในขณะที่ k <=j ทำ
- ถ้า oct_list[j] ไม่เหมือนกับ oct_list[k] แล้ว
- คืนค่าเท็จ
- j :=j - 1, k :=k + 1
- ถ้า oct_list[j] ไม่เหมือนกับ oct_list[k] แล้ว
- คืนค่า True
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
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