Python中如何查找整数的位数?

486 阅读5分钟

要找到一个整数的位数,你可以使用以下方法之一。
(1) 使用迭代
(2) 使用str()+len()函数
(3) 使用int(math.log10(x))+1
(4) 使用递归


问题的提出

  • 给定。 一个整数值。
  • 问题。找 出所给整数/数字的位数。

测试案例。

Input

方法1:迭代法

方法。

  • 使用内置的abs() 方法,得出整数的绝对值。这样做是为了照顾到用户输入的负整数值。
  • 如果输入的值是0,那么返回1作为输出。否则,请按照下面的步骤进行。
  • 初始化一个计数器变量,用来计算整数的位数。
  • 使用一个while循环,只要数字大于0就进行迭代。为了控制迭代条件,确保数字在每次迭代中都被去掉最后一位数字。这可以通过在每次迭代中执行底层除法(num//10)来实现。当你看到下面给出的代码的表格干运行时,这就更有意义了。
  • 每当while循环满足迭代条件时,增加计数器变量的值。这就保证了在计数器变量的帮助下,整数中每个数字的计数都能得到照顾。

代码。

num = int(input("Enter an Integer: "))
num = abs(num)
digit_count = 0
if num == 0:
    print("Number of Digits: ", digit_count)
else:
    while num != 0:
        num //= 10
        digit_count += 1
    print("Number of Digits: ", digit_count)

输出。

Test Case 1:

通过表格演示进行解释。

💎读者文摘。

Python的内置**abs(x)**函数返回参数x 的绝对值,该参数可以是一个整数、浮点数或实现__abs__() 函数的对象。对于一个复数,该函数返回其幅度。任何数字输入参数-x+x 的绝对值都是相应的正值+x 。**在这里**阅读更多信息。

方法2:使用str()len()。

方法。使 用Python的str() 函数将给定的整数转换成字符串。然后找出这个字符串的长度,它将返回其中存在的字符数。在这种情况下,字符数基本上是给定数字中的数字数。

为了处理负数,你可以使用abs() 函数,在将其转换为字符串之前得出其绝对值。另一个变通方法是检查数字是否为负数,并相应地返回长度,如下面的代码片段所示。

代码。

num = int(input("Enter an Integer: "))
if num >= 0:
    digit_count = len(str(num))
else:
    digit_count = len(str(num)) - 1  # to eliminate the - sign
print("Number of Digits: ", digit_count)

输出。

Test Case 1:

另一种表述方式。 不使用str(num) ,你也可以使用字符串模数,如下图所示。

num = abs(int(input("Enter an Integer: ")))
digit_count = len('%s'%num)
print("Number of Digits: ", digit_count)

方法3:使用数学模块

**免责声明:**如果给定的数字小于99999999999998,这种方法是有效的。发生这种情况是因为返回的浮点数中有太多的0.9,导致结果四舍五入。

先决条件。 要使用下面的方法来解决这个问题,必须牢牢掌握几个函数。

  1. math.log10(x)- 简单地说,这个函数返回一个浮点数,代表一个给定数字的10进制对数。

例子。

2.int(x)- 它是Python中的一个内置函数,将传递的参数x转换为一个整数值。例如,int('24') 将传递的字符串值'24' 转换为整数,并返回24 作为输出。注意,int() 函数在浮动参数上将其向下舍入为最接近的整数。

例子。

方法。

  • 使用math.log(num) 函数得出给定整数的底数10的对数值。这个值将是一个浮动的数字。因此,将其转换为一个整数。
  • 事实上,当一个数值的底10对数表示法的结果被转换为其整数表示法时,那么返回的整数值几乎肯定是一个比给定数字的位数少1的整数值。
  • 因此,在将10进制对数值转换为整数后返回的值上加1,就可以得到所需的输出。
  • 要照顾到条件在哪里。
    • 给定数=0:返回1作为输出。
    • 给定数<0 : 对给定数进行否定,最终将其转换为正数,如。int(math.log10(-num)).

代码。

import math
num = int(input("Enter an Integer: "))
if num > 0:
    digit_count = int(math.log10(num))+1
elif num == 0:
    digit_count = 1
else:
    digit_count = int(math.log10(-num))+1
print("Number of Digits: ", digit_count)

输出。

Test Case 1:

方法4:使用递归

递归是一种强大的编码技术,它允许一个函数或一个算法反复调用自己,直到一个基本条件得到满足。因此,我们可以使用这种技术来解决我们的问题。

代码

def count_digits(n):
    if n < 10:
        return 1
    return 1 + count_digits(n / 10)


num = int(input("Enter an Integer: "))
num = abs(num)
print(count_digits(num))

输出。

Test Case 1:

练习

问题:给 定一个字符串。你将如何计算该字符串中的数字、字母、空格和其他字符的数量?

解决方案。

text = 'Python Version 3.0'
digits = sum(x.isdigit() for x in text)
letters = sum(x.isalpha() for x in text)
spaces = sum(x.isspace() for x in text)
others = len(text) - digits - letters - spaces
print(f'No. of Digits = {digits}')
print(f'No. of Letters = {letters}')
print(f'No. of Spaces = {spaces}')
print(f'No. of Other Characters = {others}')

输出。

No. of Digits = 2
No. of Letters = 13
No. of Spaces = 2
No. of Other Characters = 1

解释。使 用Python内置函数检查给定字符串中的每个字符是否是数字、字母、空格或任何其他字符。在每种情况下,在sum() 方法的帮助下,找出每种类型的累积计数。为了更好地掌握上述代码中发生的情况,必须了解用于解决该问题的不同方法。

  • isdigit()。检查给定的所有字符是否为数字,即从0到9的数字(TrueFalse)。
  • isalpha()。检查给定字符串中的所有字符是否都是字母 (TrueFalse)。
  • isspace()。检查所有字符是否为空白 (TrueFalse)。
  • sum(): 返回一个给定的迭代器中所有项目的总和。

结论

我们已经讨论了多达四种寻找整数中数字的不同方法。我们还解决了一个类似的练习来提高我们的技能。我希望你喜欢这个问题,它有助于磨练你的编码技能。