我写了一个程序来检查我对纸上解决方案的想法是否正确(而且是)。
任务:从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:是的,这是一个家庭作业,但不是我的 - 我只是帮助了一个人; - )
答案 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'))
答案 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)
某些数学会不会简化它?
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"))