在Python中计算n个数相乘后末尾连续零的个数


假设我们有一个包含n个数字的数组,我们需要返回所有n个数字相乘后末尾连续零的个数。

例如,如果输入是[200, 20, 5, 30, 40, 14],则输出为6,因为200 * 20 * 5 * 30 * 40 * 14 = 336000000,末尾有六个0。

为了解决这个问题,我们将遵循以下步骤:

  • 定义一个函数`count_fact_two()`。它将接收一个数字n作为参数。

  • 计数器 := 0

  • 当n模2等于0时,重复执行:

    • 计数器 := 计数器 + 1

    • n := n / 2 (只取整数商)

  • 返回计数器

  • 定义一个函数`count_fact_five()`。它将接收一个数字n作为参数。

  • 计数器 := 0

  • 当n模5等于0时,重复执行:

    • 计数器 := 计数器 + 1

    • n := n / 5 (只取整数商)

  • 返回计数器

  • 在主方法中,执行以下操作:

  • n := A的长度

  • twos := 0, fives := 0

  • 对于i从0到n,重复执行:

    • twos := twos + count_fact_two(A[i])

    • fives := fives + count_fact_five(A[i])

  • 如果 twos > fives,则

    • 返回 twos

  • 否则,

    • 返回 fives

示例

让我们来看下面的实现,以便更好地理解:

在线演示

def count_fact_two( n ):
   count = 0
   while n % 2 == 0:
      count+=1
      n = n // 2
   return count
def count_fact_five( n ):
   count = 0
   while n % 5 == 0:
      count += 1
      n = n // 5
   return count
def get_consecutive_zeros(A):
   n = len(A)
   twos = 0
   fives = 0
   for i in range(n):
      twos += count_fact_two(A[i])
      fives += count_fact_five(A[i])
   if twos < fives:
      return twos
   else:
      return fives
A = [200, 20, 5, 30, 40, 14]
print(get_consecutive_zeros(A))

输入

[200, 20, 5, 30, 40, 14]

输出

6

更新于:2020年8月27日

202 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告