python编写函数输出自除数_728. 自除数(Python)

本文介绍了一种数学问题——自除数的定义及其求解算法。自除数是指可以被其每位数字整除的数,不含0。文章提供了一种简单有效的方法来找出指定范围内所有的自除数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

难度:★☆☆☆☆

类型:数学

自除数 是指可以被它包含的每一位数除尽的数。

例如,128 是一个自除数,因为 128 % 1 == 0,128 % 2 == 0,128 % 8 == 0。

还有,自除数不允许包含 0 。

给定上边界和下边界数字,输出一个列表,列表的元素是边界(含边界)内所有的自除数。

注意

每个输入参数的边界满足 1 <= left <= right <= 10000。

示例

输入:

上边界left = 1, 下边界right = 22

输出: [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 15, 22]

解答

这道题的思路很简单,我们可以构建一个判定一个数是否为自除数的函数,然后从范围中筛选出自除数即可。

转成字符串方式:

class Solution:

def selfDividingNumbers(self, left, right):

is_div_num = lambda n: not any([n % int(b) if b != '0' else 1 for b in list(str(n))])

return [n for n in range(left, right+1) if is_div_num(n)]

为了提高运行效率,我们通过除法运算判定自除数的存在:

class Solution:

def selfDividingNumbers(self, left: int, right: int):

def is_div_num(num):

val = num

while num % 10 != 0 and val > 0: #

tmp = val % 10 # 取出来最小位

if tmp == 0 or num % tmp != 0: # 如果当前位为零或者不能被原数整除

return False # 返回False

else: # 否则

val //= 10 # 去除val最后一位

if val == 0: # 如果所有位都经过判定

return True # 返回True

res = []

for num in range(left, right+1):

if is_div_num(num):

res.append(num)

return res

如有疑问或建议,欢迎评论区留言~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值