Bài toán: Cho số num (dạng thập phân hoặc bát phân). Nếu đã là bát phân (chỉ chứa chữ số 0-7) thì kiểm tra trực tiếp; nếu là thập phân (có chữ số 8/9) thì chuyển sang bát phân rồi kiểm tra palindrome.
Triển khai Python
def is_all_under_8(num):
while num:
if (num % 10) >= 8:
return False
num //= 10
return True
def solve(num):
base = 8 if is_all_under_8(num) else 10
oct_digits = []
while num != 0:
oct_digits.append(num % base)
num //= base
left, right = 0, len(oct_digits) - 1
while left <= right:
if oct_digits[left] != oct_digits[right]:
return False
left += 1
right -= 1
return True
# Test
print(solve(178)) # True: 178(dec) = 262(oct) - palindrome
print(solve(262)) # True: đã là oct, 262 palindrome
print(solve(123)) # False: 123(dec) = 173(oct) - không palindrome
Kết quả
True
Giải thích
is_all_under_8kiểm tra xem số có chỉ chứa chữ số 0-7 không (đã là bát phân).- Chuyển cơ số bằng phép chia lấy dư liên tiếp.
- Kiểm tra palindrome bằng hai con trỏ
left,right. - Ví dụ 178 (thập phân) → 262 (bát phân) → đối xứng → True.