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

Đếm số chữ số của số nguyên N Python

Mô tả bài toán

Cho số nguyên N, đếm số chữ số (digits).

  • 891452 → 6 chữ số
  • 0074515 (as string) → 5 chữ số (bỏ leading zeros) hoặc 7 (giữ nguyên string)

Giải pháp 1: Chuyển string + len (đơn giản nhất)

def countDigits(n):
    """Đếm chữ số, tự động bỏ leading zeros nếu n là int."""
    return len(str(abs(int(n))))  # abs cho số âm, int bỏ leading zeros

# Test
print(countDigits(891452))      # 6
print(countDigits("0074515"))   # 5 (int("0074515") = 74515)
print(countDigits(-123))        # 3

Giải pháp 2: Toán học - chia 10 liên tiếp (cách gốc)

def countDigits(n):
    ans = 0
    n = abs(int(n))  # xử lý số âm và string
    if n == 0:
        return 1
    while n:
        ans += 1
        n //= 10
    return ans

print(countDigits("45758"))  # 5

Giải pháp 3: Logarit (O(1) - nhanh nhất cho số lớn)

import math

def countDigitsLog(n):
    n = abs(int(n))
    if n == 0:
        return 1
    return int(math.log10(n)) + 1

print(countDigitsLog(891452))  # 6

So sánh

Phương phápĐộ phức tạpXử lý edge caseKhuyên dùng
str + lenO(d)Tốt (auto int conversion)Đơn giản, đủ nhanh
While loopO(d)Cần handle 0, âmGiáo dục
math.log10O(1)Cần handle 0, âmSố rất lớn, performance critical

Lưu ý: Code gốc có bug: n = "45758" truyền string vào while n: -> infinite loop (string non-empty always True). Cần int(n) trước.