from functools import reduce
n = int(input("请输入范围数:"))
for a in range(10,n):
b = []
c = len(str(a))
for i in range(c):
d = str(a)
b.append(int(d[i])**c)
if reduce(lambda x,y: x + y, b) == a:
print(len(str(a)),a)
算出1亿内18个,严格地说,就4个
请输入几位水仙花数:3
3 153
消耗的时间是:3.48秒
3 370
消耗的时间是:3.48秒
3 371
消耗的时间是:3.48秒
3 407
消耗的时间是:3.48秒
请输入几位水仙花数:4
4 1634
消耗的时间是:2.70秒
4 8208
消耗的时间是:2.74秒
4 9474
消耗的时间是:2.75秒
程序运行第 1 次
请输入几位水仙花数:5
5 54748
消耗的时间是:4.44秒
5 92727
消耗的时间是:4.68秒
5 93084
消耗的时间是:4.68秒
程序运行第 2 次
请输入几位水仙花数:6
6 548834
消耗的时间是:8.54秒
程序运行第 3 次
请输入几位水仙花数:7
7 1741725
消耗的时间是:10.58秒
7 4210818
消耗的时间是:31.67秒
7 9800817
消耗的时间是:79.42秒
7 9926315
消耗的时间是:80.49秒
程序运行第 4 次
程序运行结束
program shuixian;
var
a,b,c:integer;
begin
for a:=1 to 9 do
for b:=0 to 9 do
for c:=0 to 9 do
if a*a*a+b*b*b+c*c*c=a*100+b*10+c then
writeln(a*100+b*10+c,' ');
end.
这个是三位的,再加两层循环就行,自己改吧,
是不是每一数位上的数字的3次方之和等于这个数字的本身?