Python刷题(10-12)

Python刷题

PythonTip-挑战Python

(以下代码是在PyCharm上运行成功的,如果想要在刷题上成功运行,需要把前边的定义去掉)

10.题目描述:

给你两个正整数a和b, 输出它们的最小公倍数。

import math

a=5
b=15
c=math.gcd(a,b)      #求最大公约数
d=a*b/c              #求最小公倍数
print(int(d))

(该题先用系统函数求出最大公约数,通过计算可以直接求出最小公倍数,值得注意的是需要将最小公倍数转化成整型才能正确输出)

11.题目描述:

给你一个正整数列表 L, 输出L内所有数字的乘积末尾0的个数。(提示:不要直接相乘,数字很多,相乘得到的结果可能会很大)。

L=[4,2,25,7777777,100,3,77777777,77777777,77777777,77777777]
num2=0
num5=0
for i in L:
    if i%2==0:
        a = i
        while a%2 == 0:
            num2 =num2+1
            a=a/2
    if i % 5 == 0:
        b = i
        while b % 5 == 0:
            num5=num5+1
            b=b/5
print(min(num5,num2))

(该题目中只有2*5才会有一个零出现,所以我们只需要计算出列表里有多少2和多少5,求他们的最小值就可以得出结果)

12.题目描述:

给你一个正整数列表 L, 判断列表内所有数字乘积的最后一个非零数字的奇偶性。如果为奇数输出1,偶数则输出0.。

'''结尾非零数的奇偶性'''
L=[2,8,3,50]
num2=1
for i in L:
    if i%2 == 0:
        num2 = 0
    else:
        num2 = 1
print(num2)

(跟上一道题差不多,我的理解是看这个列表中若有2的倍数则最后结果一定是偶数,输出0,否则输出1)刚刚又看了看这样写是不对的,这样写的结果是看列表的最后一个值的奇偶性,而不是相乘所有值的奇偶性,所以应该是一旦判断该列表中有2的倍数,直接跳出输出0(但是奇怪的是上述代码在刷题中竟然能通过,而加了break的竟然没有通过)

#稍有改正
'''结尾非零数的奇偶性'''
L=[2,8,3,5]
num2=1
for i in L:
    if i%2 == 0:
        num2 = 0
        break
    else:
        num2 = 1
print(num2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值