简化这个python代码

时间:2010-10-26 23:17:09

标签: python

我写了一个程序来检查我对纸上解决方案的想法是否正确(而且是)。

任务:从10到200的所有数字相乘后面有多少个零。

它是48,手动计算很简单。

我从不认真地写python,这就是我得到的:

mul = 1
for i in range(10, 200 + 1):
    mul *= i

string = str(mul)
string = string[::-1]
count = 0;
for c in str(string):
    if c == '0':
        count += 1
    else:
        break

print count
print mul

我敢打赌,用python这样的语言可以写得更优雅。

ps:是的,这是一个家庭作业,但不是我的 - 我只是帮助了一个人; - )

7 个答案:

答案 0 :(得分:11)

一个直接的实现,不涉及计算阶乘(因此它适用于大数,即2000000!)(已编辑)

fives = 0
twos = 0
for i in range(10, 201):
   while i % 5 == 0:
      fives = fives + 1
      i /= 5
   while i % 2 == 0:
      twos = twos + 1
      i /= 2
print(min(fives, twos))

答案 1 :(得分:6)

import math

answer = str(math.factorial(200) / math.factorial(9))
count = len(answer) - len(answer.rstrip('0'))
  1. 导入数学库
  2. 计算200的factorial并取走前9个数字
  3. 从右边剥去零,找出长度差异

答案 2 :(得分:4)

print sum(1 + (not i%25) + (not i%125) for i in xrange(10,201,5))

答案 3 :(得分:3)

import itertools
mul = reduce(lambda x,y: x*y, range(10, 200+1))
zeros = itertools.takewhile(lambda s: s == "0", reversed(str(mul)))
print len(list(zeros))

第二行计算产品,第三行获取该数字中所有尾随零的迭代器,最后一行输出该零的数量。

答案 4 :(得分:3)

len(re.search('0*$', str(reduce(lambda x, y: x*y, range(10, 200 + 1),1))).group(0))

答案 5 :(得分:2)

你是说零吗?什么是null呢?

  

某些数学会不会简化它?

     

200中有多少5是len([x代表范围内的x(5,201,5)])= 40

     

200中有多少25是len([x代表范围内的x(25,201,5)如果x%25 == 0])= 8

     

200中有多少125是len([x表示范围内的x(120,201,5),如果x%125 == 0])= 1

总计5s = 49

200! = 5 ^ 49 * 2 ^ 49 *(其他数字不能被2或5整除)

所以有49个零

答案 6 :(得分:0)

mul = str(reduce(lambda x,y: x*y, xrange(10, 201)))
count = len(mul) - len(mul.rstrip("0"))