Ví dụ 1: Số lượng chữ số trong một số nguyên sử dụng trong khi vòng lặp
num = 3452
count = 0
while num != 0:
num //= 10
count += 1
print["Number of digits: " + str[count]]
Đầu ra
Number of digits: 4
Trong chương trình này, vòng lặp trong khi được lặp lại cho đến khi biểu thức kiểm tra
Number of digits: 40 được đánh giá thành 0 [sai].
- Sau lần lặp đầu tiên,
Number of digits: 4
1 sẽ được chia cho 10 và giá trị của nó sẽ là 345. Sau đó,Number of digits: 4
2 được tăng lên 1. - Sau lần lặp thứ hai, giá trị của
Number of digits: 4
1 sẽ là 34 vàNumber of digits: 4
2 được tăng lên 2. - Sau lần lặp thứ ba, giá trị của
Number of digits: 4
1 sẽ là 3 vàNumber of digits: 4
2 được tăng lên 3. - Sau lần lặp thứ tư, giá trị của
Number of digits: 4
1 sẽ là 0 vàNumber of digits: 4
2 được tăng lên 4. - Sau đó, biểu thức kiểm tra được đánh giá là sai và vòng lặp chấm dứt.
Ví dụ 2: Sử dụng các phương thức sẵn có
num = 123456
print[len[str[num]]]
Đầu ra
6
Trong chương trình này, vòng lặp trong khi được lặp lại cho đến khi biểu thức kiểm tra
Number of digits: 40 được đánh giá thành 0 [sai].
Như được hiển thị bởi các câu trả lời khác, việc sử dụng
num = 123456
print[len[str[num]]]
1 dẫn đến kết quả không chính xác cho num = 123456
print[len[str[num]]]
2 lớn trong khi sử dụng num = 123456
print[len[str[num]]]
3 hoặc vòng lặp thủ công dẫn đến hiệu suất chậm cho num = 123456
print[len[str[num]]]
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 num = 123456
print[len[str[num]]]
2 đủ nhỏ để num = 123456
print[len[str[num]]]
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 num = 123456
print[len[str[num]]]
2 small enough that num = 123456
print[len[str[num]]]
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 0
i = int[0.30102999566398114 * [n.bit_length[] - 1]] + 1
return [10 ** i int:
assert n > 0
i = int[0.30102999566398114 * [n.bit_length[] - 1]] + 1
return [10 ** i int:
assert n > 0
i = int[0.30102999566398114 * [n.bit_length[] - 1]] + 1
return [10 ** i int:
assert n > 0
i = int[0.30102999566398114 * [n.bit_length[] - 1]] + 1
return [10 ** i int:
assert n > 0
i = int[0.30102999566398114 * [n.bit_length[] - 1]] + 1
return [10 ** i