Harshad 数

Python挑战练习-进阶挑战36

编写一个程序来判断一个数字是否为Harshad数。

如果一个数字可以被它的数字之和整除,那么它就是一个Harshad数,如171:

number = 171
1 + 7 + 1 = 9 [数字之和]
9 正好整除 171

  • 定义函数is_harshad(),参数为num(整数)。

  • 在函数内,判断该数字是否为Harshad数,如果是,返回True,否则返回False


    分析:要把每个数字提取出来,还要求他们的和,于是想到可以利用逐步取余数的办法,把每一位数字取出来,再相加,进一步把得到的和再与原数运算,看是否能整除。

def is_harshad(num):
    digit_sum = 0
    n = num
    while n > 0:
        digit = n % 10
        digit_sum += digit
        n //= 10
    return num % digit_sum == 0

解释:

  • 初始化变量

    digit_sum 初始化为 0,用于累加数字各位数字之和。n 初始化为 num,后续会在循环中不断更新它的值来依次获取每一位数字,而保留原始的 num 用于最后的整除判断。

  • 循环提取数位数字并求和
    通过 while n > 0: 循环来判断是否还有未处理的数位,只要 n 大于 0,就说明数字还有数位没处理完。在循环中:

    • digit = n % 10:这一步获取 n 的个位数字,例如 n 为 171 时,n % 10 得到 1,也就是个位数字。

    • digit_sum += digit:将获取到的个位数字累加到 digit_sum 变量中,用于计算各位数字之和。

    • n //= 10:这一步将 n 进行整除 10 的操作,相当于去掉了已经处理过的个位数字,例如 n 为 171 时,执行完这一步后 n 变为 17,这样就可以在下一次循环中继续处理十位数字了。

  • 判断是否为 Harshad 数并返回结果
    当循环结束后,digit_sum 中存储的就是原数字各位数字之和,通过 return num % digit_sum == 0 判断原数字 num 是否能被 digit_sum 整除,如果能整除,这个表达式的值为 True,函数返回 True;如果不能整除,表达式的值为 False,函数返回 False。


    几个需要注意的地方(写给自己)

①代码中出现了digit_sum,也就是求和部分,所以首先一定要给他进行初始化。 

②n//=10,比如171,取出个位数字1之后,下一步是对17再取余,取出7,这里也存在一个循环的过程,所以写成//=,而并不是只有一次的num//10,num是不变的,变化的是n的值!

③被谁整除,翻译过来就是除以谁,所以用num除以digit_num,返回布尔值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值