在Python中,如何找到一个整数的数字个数?
```
```
在Python中,如何找到一个整数的数字个数?
```def count_digit(number):
if number >= 10:
count = 2
else:
count = 1
while number//10 > 9:
count += 1
number = number//10
return count
以下是最简单的方法,不需要将整数转换为字符串:
假设给定一个15位数字n=787878899999999;
n=787878899999999
n=abs(n) // we are finding absolute value because if the number is negative int to string conversion will produce wrong output
count=0 //we have taken a counter variable which will increment itself till the last digit
while(n):
n=n//10 /*Here we are removing the last digit of a number...it will remove until 0 digits will left...and we know that while(0) is False*/
count+=1 /*this counter variable simply increase its value by 1 after deleting a digit from the original number
print(count) /*when the while loop will become False because n=0, we will simply print the value of counter variable
输入:
n=787878899999999
输出:
15
a = 000
时。def number_length(a: int) -> int:
length = 0
if a == 0:
return length + 1
else:
while a > 0:
a = a // 10
length += 1
return length
if __name__ == '__main__':
print(number_length(123)
assert number_length(10) == 2
assert number_length(0) == 1
assert number_length(256) == 3
assert number_length(4444) == 4
a: int
是正确的,但对于 float
不起作用。例如,number_length(1.5)
返回 1
。 - Intrastellar Explorer我用的代码如下;我使用了log10方法:
from math import *
定义函数digit_count(number):
if number>1 and round(log10(number))>=log10(number) and number%10!=0 :
return round(log10(number))
elif number>1 and round(log10(number))<log10(number) and number%10!=0:
return round(log10(number))+1
elif number%10==0 and number!=0:
return int(log10(number)+1)
elif number==1 or number==0:
return 1
n = 3566002020360505
count = 0
while(n>0):
count += 1
n = n //10
print(f"The number of digits in the number are: {count}")
顶部答案表明math.log10更快,但我的结果表明len(str(n))更快。
arr = []
for i in range(5000000):
arr.append(random.randint(0,12345678901234567890))
%%timeit
for n in arr:
len(str(n))
//2.72 s ± 304 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
%%timeit
for n in arr:
int(math.log10(n))+1
//3.13 s ± 545 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
n = input("Enter number: ")
print(len(n))
n = int(n)
不使用import和像str()这样的函数的解决方案
def numlen(num):
result = 1
divider = 10
while num % divider != num:
divider *= 10
result += 1
return result
def NoOfDigit(num):
noOfDigit = 0
while num>0: #eventually zero after continuous integer division
num = num//10 #integer Division, Eg. 123//10 will give 12
noOfDigit += 1 #this is our number of digit
return noOfDigit
num = 12345553
print (f'Number of Digits in {num} is: {NoOfDigit(num)}')
num = -1234 #in case of negative number you need to make it absoulte value
print (f'Number of Digits in {num} is: {NoOfDigit(abs(num))}')
num = 012345553 #this will not be a valid integer for this code
print (f'Number of Digits in {num} is: {NoOfDigit(num)}')
count_number = input('Please enter a number\t')
print(len(count_number))