前言
水仙花数,问题非常直观也非常简单,直接根据问题表述写程序即可,不用考虑优化问题。
问题
水仙花数,是一个三位数,它的数值等于各个位置的数字的立方和,如 153 = 1 3 + 5 3 + 3 3 153 = 1^3+5^3+3^3 153=13+53+33 ,求出所有3位数的水仙花数。
编程思路
- 把数 n u m num num的每一位单独提取出来
- 比较
实现代码
#!/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)
运行结果
代码分析
- 理解
i = temp // 100
, 这是编程语言特有的现象,如 345 / / 100 = 3 345//100=3 345//100=3, 十位数的处理同理,不过要先把百位数去掉,理解temp = temp % 100 # 去掉百位
。 - 更改下位数,可以研究4位数,5位数的水仙花数。
ps: 这个程序很简单,没什么过多分析的,运行时间也检测不到。
总结
保持每天写代码,使用Python语言来表达思想,真的会越来越快,虽然这篇真的是在滥竽充数,不过,至少督促了我动手写了代码。