python 作业1

本文介绍了一种计算整数列表中所有元素乘积末尾0个数的算法。通过分别统计列表中每个数字包含2和5因子的数量来避免直接相乘,最终输出2和5因子数量较小的那个作为答案。

题目描述:

给你一个正整数列表 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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值