LintCode Python 水仙花数(当n >= 6时报错)
什么是水仙花数
对于水仙花数的原始定义我们不需要深究,该题的描述如下:
水仙花数的定义是,这个数等于他每一位数上的幂次之和 见维基百科的定义
比如一个3位的十进制整数153就是一个水仙花数。因为 153 = 1 3 + 5 3 + 3 3 153 = 1^3 + 5^3 + 3^3 153=13+53+33。
而一个4位的十进制数1634也是一个水仙花数,因为 1634 = 1 4 + 6 4 + 3 4 + 4 4 1634 = 1^4 + 6^4 + 3^4 + 4^4 1634=14+64+34+44。
给出n,找到所有的n位十进制水仙花数(可以认为n <= 8)
再举个例子,加入 n = 1 n = 1 n=1,那么需要返回的水仙花数列表为[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]。
代码修改前(Python 3)
def narcissistic_number(n): # n = 3, e.g. 153 = 1^n + 5^n + 3^n result = [] start = pow(10, n - 1) - 1 if n == 1 else pow(10, n - 1) end = pow(10, n) for value in range(start, end): if judge(value, n): result.append(value) return result def judge(value, n): # 判断一个数是否为水仙花数 # 153 n = 3 val = value sum_ = 0 for i in range(n, 0, -1):sum_ += pow(val // pow(10, i - 1), n)if sum_ > value:return Falseval = val % pow(10, i - 1)return sum_ == value
12345678910111213141516171819202122代码修改后(顺利通过)
def judge(value, n): # 判断一个数是否为水仙花数 # 153 n = 3 sum_ = sum([pow(int(e), n) for e in list(str(value))]) return value == sum_ 12345
因为在便利范围数据的时候实在是没想出来有什么好的方法,所以想着优化一下判断这块,那么这里的话把Judge函数中的数值分解过程用list直接替换了,做法就是先转成str然后再转回list,然后再转为int,然后在列表表达式中直接求幂指数,然后用sum对list求和,就得到了求和后的结果,不过,函数调用也需要花费一定的时间,所以不用Judge这个函数了,直接重写为下式:
def narcissistic_number(n): # n = 3, e.g. 153 = 1^n + 5^n + 3^n result = [] start = pow(10, n - 1) - 1 if n == 1 else pow(10, n - 1) end = pow(10, n) for value in range(start, end): if value == sum([pow(int(e), n) for e in list(str(value))]): result.append(value) return result 12345678910
大功告成~顺便给出N <= 8的所有水仙花数,如下表:
nnarcissistic number1[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]2[]3[153, 370, 371, 407]4[1634, 8208, 9474]5[54748, 92727, 93084]6[548834]7[1741725, 4210818, 9800817, 9926315]8[24678050, 24678051, 88593477]可以发现,符合水仙花数条件的并不是很多。
相关知识
python水仙花数的编程代码
python水仙花数的编程讲解
n位水仙花数
C语言:输出所有的水仙花数
Python水仙花、冥函数、质因数、完全数案例练习题!
Python海龟编辑器判断水仙花数
python 水仙花数 水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。 例如:153=1×1×1+5×5×5+3×3×3。
水仙花数
打印“水仙花数”
Python实例(六)
网址: LintCode Python 水仙花数(当n >= 6时报错) https://www.huajiangbk.com/newsview350280.html
上一篇: 求出100~999之间的所有“水 |
下一篇: Python 水仙花数练习 |
推荐分享

- 1君子兰什么品种最名贵 十大名 4012
- 2世界上最名贵的10种兰花图片 3364
- 3花圈挽联怎么写? 3286
- 4迷信说家里不能放假花 家里摆 1878
- 5香山红叶什么时候红 1493
- 6花的意思,花的解释,花的拼音 1210
- 7教师节送什么花最合适 1167
- 8勿忘我花图片 1103
- 9橄榄枝的象征意义 1093
- 10洛阳的市花 1039