Hướng dẫn how to find digits of a number in python - cách tìm các chữ số của một số trong python

Như được hiển thị bởi các câu trả lời khác, việc sử dụng

assert 4 == [0b1111].bit_length[]
assert 8 == [0b1011_1000].bit_length[]
assert 9 == [0b1_1011_1000].bit_length[]
1 dẫn đến kết quả không chính xác cho
assert 4 == [0b1111].bit_length[]
assert 8 == [0b1011_1000].bit_length[]
assert 9 == [0b1_1011_1000].bit_length[]
2 lớn trong khi sử dụng
assert 4 == [0b1111].bit_length[]
assert 8 == [0b1011_1000].bit_length[]
assert 9 == [0b1_1011_1000].bit_length[]
3 hoặc vòng lặp thủ công dẫn đến hiệu suất chậm cho
assert 4 == [0b1111].bit_length[]
assert 8 == [0b1011_1000].bit_length[]
assert 9 == [0b1_1011_1000].bit_length[]
2 lớn. Câu trả lời của Jodag cung cấp một sự thay thế thực sự tốt mà chỉ thất bại đối với các số nguyên có thể sẽ làm hỏng máy tính của bạn, nhưng chúng tôi có thể làm tốt hơn một chút và thậm chí nhanh hơn [đối với
assert 4 == [0b1111].bit_length[]
assert 8 == [0b1011_1000].bit_length[]
assert 9 == [0b1_1011_1000].bit_length[]
2 đủ nhỏ để
assert 4 == [0b1111].bit_length[]
assert 8 == [0b1011_1000].bit_length[]
assert 9 == [0b1_1011_1000].bit_length[]
6 được đảm bảo là chính xác] bằng cách tránh logarit hoàn toàn và sử dụng nhị phân thay thế :and even faster [for
assert 4 == [0b1111].bit_length[]
assert 8 == [0b1011_1000].bit_length[]
assert 9 == [0b1_1011_1000].bit_length[]
2 small enough that
assert 4 == [0b1111].bit_length[]
assert 8 == [0b1011_1000].bit_length[]
assert 9 == [0b1_1011_1000].bit_length[]
6 is guaranteed to be accurate] by avoid logarithms altogether and using binary instead:

def num_digits[n: int] -> int:
    assert n > 0
    i = int[0.30102999566398114 * [n.bit_length[] - 1]] + 1
    return [10 ** i 

Bài Viết Liên Quan

Chủ Đề