End Zeros

问题描述:

Try to find out how many zeros a given number has at the end.

Input: A positive Int

Output: An Int.

def end_zeros(num: int) -> int:
    # your code here
    return None


if __name__ == '__main__':
    print("Example:")
    print(end_zeros(0))

    # These "asserts" are used for self-checking and not for an auto-testing
    assert end_zeros(0) == 1
    assert end_zeros(1) == 0
    assert end_zeros(10) == 1
    assert end_zeros(101) == 0
    assert end_zeros(245) == 0
    assert end_zeros(100100) == 2
    print("Coding complete? Click 'Check' to earn cool rewards!")

题目很简单,统计在数字末尾有多少个零。

末尾有零,说明能被10整除。于是可以用for循环加判断,

def end_zeros(num: int) -> int:
    # your code here
    n=0
    for i in range(len(str(num))):
        if num%10 ==0:
            n=n+1
            num=num/10
        else:
            break
    return n

其他用户的解决方案一:

def end_zeros(num: int) -> int:
    return len(s := str(num)) - len(s.rstrip('0'))

看一下str.rstrip的用法:

str.rstrip([chars])

返回原字符串的副本,移除其中的末尾字符。 chars 参数为指定要移除字符的字符串。 如果省略或为 None,则 chars 参数默认移除空白符。 实际上 chars 参数并非指定单个后缀;而是会移除参数值的所有组合。

就是移除字符串末尾的字符,无论有多少。

上面的解释就是,用没有去掉零的数字字符串长度减去去掉零的数字字符串长度,得到的当然只有零的个数,非常巧妙,而且简洁。

解决方案二:利用正则表达式

import re

def end_zeros(num: int) -> int:
    return len(re.findall('0*$', str(num))[0])

re.findall(patternstringflags=0)

对 string 返回一个不重复的 pattern 的匹配列表, string 从左到右进行扫描,匹配按找到的顺序返回。如果样式里存在一到多个组,就返回一个组合列表;就是一个元组的列表(如果样式里有超过一个组合的话)。空匹配也会包含在结果里。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值