题目描述:
给你一个正整数列表 L, 输出L内所有数字的乘积末尾0的个数。(提示:不要直接相乘,数字很多,相乘得到的结果可能会很大)。
例如: L=[2,8,3,50],
则输出:2
自己写的程序如下:
def Nu5(a):
(n,l)=divmod(a,5)
k=0
while l==0:
k=k+1
a=n
(n,l)=divmod(a,5)
return k
def Nu2(a):
(n,l)=divmod(a,2)
k=0
while l==0:
k=k+1
a=n
(n,l)=divmod(a,2)
return k
s2=sum(list(map(Nu2,L))) #求出所有数含有2的个数
s5=sum(list(map(Nu5,L))) #求出所有数含有5的个数
if s5>s2:
s=s2
else:
s=s5
print(s)对比大神的答案如下,感到的是干净简介,对比发现,自己在计算一个数含有的2,5的个数代码上写得太过冗余。
num2=0;
num5=0;
for num in L:
while num%2==0:
num=num/2;
num2+=1;
while num%5==0:
num=num/5;
num5+=1;
print min(num2,num5);
本文介绍了一种计算整数列表中所有元素乘积末尾0个数的算法。通过分别统计列表中每个数字包含2和5因子的数量来避免直接相乘,最终输出2和5因子数量较小的那个作为答案。
919

被折叠的 条评论
为什么被折叠?



