算法学习(8)数学问题求解系列(5)水仙花数

前言

水仙花数,问题非常直观也非常简单,直接根据问题表述写程序即可,不用考虑优化问题。

问题

水仙花数,是一个三位数,它的数值等于各个位置的数字的立方和,如 153 = 1 3 + 5 3 + 3 3 153 = 1^3+5^3+3^3 153=13+53+33 ,求出所有3位数的水仙花数。

编程思路

  1. 把数 n u m num num的每一位单独提取出来
  2. 比较

实现代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date    : 2019-04-06 12:29:36
# @Author  : Promise (promise@mail.ustc.edu.cn)
# @Link    : ${link}
# @Version : $Id$

import time


# 查找水仙花数
# 编程思路:1)拆分出各个位
#          2)立方判断
def FindNarcissusNum():
    count = 0  # 统计水仙花数个数
    for num in range(100, 1000):
        temp = num
        i = temp // 100  # 提取百位
        temp = temp % 100  # 去掉百位
        j = temp // 10  # 提取十位
        k = temp % 10  # 取出各位
        if i**3 + j**3 + k**3 == num:
            print('第', count+1, '个水仙花数:', num)
            count += 1


# 主函数调用
start = time.process_time_ns()
FindNarcissusNum()
end = time.process_time_ns()
print('运行时间t=', end - start)

运行结果

运行结果

代码分析

  1. 理解i = temp // 100, 这是编程语言特有的现象,如 345 / / 100 = 3 345//100=3 345//100=3, 十位数的处理同理,不过要先把百位数去掉,理解temp = temp % 100 # 去掉百位
  2. 更改下位数,可以研究4位数,5位数的水仙花数。
    ps: 这个程序很简单,没什么过多分析的,运行时间也检测不到。

总结

保持每天写代码,使用Python语言来表达思想,真的会越来越快,虽然这篇真的是在滥竽充数,不过,至少督促了我动手写了代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值