python之结尾非零数的奇偶性

1.贴题

题目来自PythonTip
结尾非零数的奇偶性


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

例如:L=[2,8,3,50]

则输出:0


2.说明

这道题同样难在思路上。
首先简化问题,如果只要求判断奇偶性的话就很简单了,只要取列表中每个数的最后一位数看是否是偶数,只要出现偶数则最终一定是偶数,否则是奇数。
但是题目要求是非零数字,所以首先要考虑末尾有几个零。这样就转化为了上一道题
python之结尾0的个数

3.参考代码

temp,c = 1,0 #temp用来保存列表中每一个数从右边数第一个非零数
for x in L[::1]: #每次从列表L中取一个数
    temp = temp*x #与temp相乘
    t = str(temp) #转化为字符串方便取最后一位
    for y in t[::-1]: #循环从后往前每次取一位
        if y=='0': #如果遇到零
            c += 1 #计数加一
        else:
            temp = int(y) #遇到第一个不为零的数,将其转换为int后保存至temp
            break #跳出循环
if temp % 2 == 0: #列表中所有的数取完后,temp的值就是从右往左第一位非零数乘积的个位数,判断其奇偶性即可
    print(0)
else:
    print(1)

举个栗子来说明,
1. 列表为L=[2,8,3,50]
2. 首先temp=1,c=0
3. 从列表中取第一个数2
4. temp变为2
5. 最后一个非零位为2,temp还是2
6. 取第二个数8
7. temp变为16
8. 最后一个非零位6,temp变为6
9. 取第三个数3
10. temp变为18
11. 最后一个非零位8,temp变为8
12. 取第四个数50
13. temp变为400
14. 最后一个非零位4,temp变为4
15. 列表中全部元素取完了,判断temp奇偶性,为偶数,所以输出0

ps:上题python之结尾0的个数需要输出末尾零的个数所以需要使用c来存储计数,在本题中其实可以删除c部分,不影响结果。

4.其他写法

1.判断2和5的个数,2多则为偶,5多则为奇
来自AirFish

numOf2 = 0
numOf5 = 0
for key in L:
    while key % 2 == 0:
        numOf2 += 1
        key /= 2

    while key % 5 == 0:
        numOf5 += 1
        key /= 5
if numOf2 > numOf5:
    print(0)               #2比5多一定是偶数
else:
    print(1)

2.直接舍去末尾的零
来自cyh

sum = 1
for i in L:
    sum *= i
    while sum % 10 ==0:
        sum = sum//10
print(sum%2)

5.存档不考虑零的判断奇偶性代码

flag = False
for l in L:
    m = int(str(l)[-1])
    if m % 2 == 0:
        flag = True
print(int(not flag))

猜你喜欢

转载自blog.csdn.net/weixin_41980474/article/details/80203352
今日推荐