如何找到整数中数字的长度?

375
在Python中,如何找到一个整数的数字个数?
```

在Python中,如何找到一个整数的数字个数?

```

4
我不理解你的问题。你是指整数的大小吗?你想找出数字的位数吗?请澄清。 - batbrat
32个回答

2
def count_digit(number):
  if number >= 10:
    count = 2
  else:
    count = 1
  while number//10 > 9:
    count += 1
    number = number//10
  return count

虽然这段代码可能解决了问题,但是包括解释它如何以及为什么解决了问题将有助于提高您的帖子质量,并可能导致更多的赞。请记住,您正在回答未来读者的问题,而不仅仅是现在提问的人。请[编辑]您的答案以添加解释并指出适用的限制和假设。 - Adrian Mole

1

以下是最简单的方法,不需要将整数转换为字符串:

假设给定一个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

1
如果您想要一种不使用内置函数的解决方案。 唯一的注意事项是当您发送 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

1

我用的代码如下;我使用了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

我不得不在1和0的情况下进行指定,因为log10(1)=0且log10(0)=ND,因此未满足所述条件。但是,此代码仅适用于整数。

1
n = 3566002020360505
count = 0
while(n>0):
  count += 1
  n = n //10
print(f"The number of digits in the number are: {count}")

输出:该数字的位数为16。

1

顶部答案表明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)

此外,我还没有为数学方法添加逻辑以返回准确的结果,我只能想象它会使它变得更慢。虽然我不知道之前的答案是如何证明数学方法更快的。

0
你可以使用这个解决方案:
n = input("Enter number: ")
print(len(n))
n = int(n)

0

不使用import和像str()这样的函数的解决方案

def numlen(num):
    result = 1
    divider = 10
    while num % divider != num:
        divider *= 10
        result += 1
    return result

0
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

让我们看几个例子:
例子1,对于这种情况,它会正常工作。
num = 12345553
print (f'Number of Digits in {num} is: {NoOfDigit(num)}')

#示例2,负整数需要转换为正数才能使该函数正常工作
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))}')

#示例3,函数无法理解整数前的零,因此在将其输入函数之前需要处理好。
num = 012345553 #this will not be a valid integer for this code
print (f'Number of Digits in {num} is: {NoOfDigit(num)}')

0
如果你需要要求用户输入并计算有多少个数字,可以按照以下步骤进行:
count_number = input('Please enter a number\t')

print(len(count_number))

注意:永远不要将 int 作为用户输入。

你在这里描述的是一个相当特定的情况,实际上与字符串的长度有关。此外,我可以输入任何非数字字符,你仍然会认为它是一个数字。 - Ben

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接