Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Kiểm tra số có phải palindrome trong hệ bát phân không (Python)

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_8 kiể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.