def factorial(number):
if number == 1 or number == 0:
return 1
else:
return number * factorial(number - 1)
def main():
for i in range(100, 1000):
bai = i // 100
shi = i % 100 // 10
ge = i % 100 % 10
fac_bai = factorial(bai)
fac_shi = factorial(shi)
fac_ge = factorial(ge)
if fac_bai + fac_shi + fac_ge == i:
print(i)
if __name__ == '__main__':
main()
import math
def main():
m = []
for g in range(10):
for s in range(10):
for b in range(1,10):
b_f = math.factorial(b)
s_f = math.factorial(s)
g_f = math.factorial(g)
m_shiji = b * 100 + s * 10 + g
qiuhe = b_f + s_f + g_f
if m_shiji == qiuhe:
m.append(m_shiji)
print (m_shiji)
print (m)
if __name__ == "__main__":
main()
def fact(n):
if n < 1:
return 1
else:
return n * fact(n - 1)
for i in range(100, 1000):
if i == fact(i // 100) + fact((i // 10) % 10) + fact(i % 10):
print(i)
def factorial(num):
if num == 1 or num == 0:
return 1
else:
return num * factorial(num - 1)
def main():
for i in range(100,1000):
a = i %10
b = (i // 10) % 10
c = i // 100
if i == factorial(a) + factorial(b) + factorial(c):
print(i)
main()
哈哈
def jiecheng(n):
cc=1
for i in range(1,n+1):
cc*=i
return cc
for iii in range(1,10):
for ii in range(1,10):
for i in range(0,10):
if (iii*100+ ii *10+i)== (jiecheng(iii)+jiecheng(ii)+jiecheng(i)):
print (iii*100+ ii *10+i)
本帖最后由 Chase_Kas 于 2018-3-5 15:14 编辑
def factorial(a):
product = 1
if a == 0:
return 1
else:
for i in range(1, a + 1):
product *= i
return product
print([x*100+y*10+z for x in range(1,10) for y in range(10) for z in range(10) \
if x*100+y*10+z==factorial(x)+factorial(y)+factorial(z)])
题目说明有点问题,“找出这样的三位数,其值等于其各位数字的阶乘。”
应该是:”各位数字阶乘的和”
import math
for number in range(100,1000):
b = number//100
s = number//10%10
g = number%10
if math.factorial(b)+math.factorial(s)+math.factorial(g) == number:
print(number)
def jiecheng(x):
a = 1
for i in range(1,x+1):
a *= i
return a
for i in range(100,1000):
x =
if jiecheng(x)+jiecheng(x)+jiecheng(x) == i:
print(i)
结果:145
本帖最后由 t6am3 于 2018-3-5 21:41 编辑
def factorial(x):
tmp = x
for i in range(1,x):
x *= (tmp-i)
return x
for i in range(100, 1000):
sum = 0
for j in tuple(str(i)):
sum += factorial(int(j))
if sum == i:
print('找到这样一个数:', i)
另外想问一下如何以Notepad++格式输出啊。。。
本帖最后由 雪人爱晒大太阳 于 2018-3-6 10:48 编辑
感觉自己用到的是最笨的方法了吧,时间复杂度和空间复杂度应该都很高的~
想看看其他鱼油用的方法~
#First define the FACTORIAL function
def fac(n):
if n == 0:
return 1
else:
return n*fac(n-1)
#Second define the SUM Factorial Function
def sun_fac(k):
'k=abc we need to excrat a,b,c from k'
a = k//100
b = k%100//10
c = k%10
return fac(a) + fac(b) + fac(c)
#Third define MAIN Function
def main():
ans=[]
for i in range(100,1000):
if i == sun_fac(i):
ans.append(i)
return ans
#Run programme
main()
pony马 发表于 2018-2-28 11:01
看了一下你的最简洁,完美
LargeCat 发表于 2018-2-28 12:53
结果:
1*2*3*4*5=120
1*2*3*4*5*6=720
看着有些复杂,懵逼
8306最硬 发表于 2018-2-28 14:40
是各阶乘之和么
牛逼,简洁
from math import factorial
for n in range(100,1000):
a = n % 10
b = (n//10)%10
c = n//100
if n == factorial(a)+factorial(b)+factorial(c):
print(n)
Andy0214 发表于 2018-3-7 09:02
牛逼,简洁
导进了factorial 函数算是偷懒了hah
def fac(n):
if n==1 or n == 0:
return 1
else:
return n*fac(n-1)
for i in range(100,1000):
i = str(i)
if (fac(int(i)) + fac(int(i)) +fac(int(i))) ==int(i):
print(int(i))
def getFactorialNum() :
num = 100
list1 = []
while num < 1000 :
if (factorial(num // 100) + factorial(num % 100 // 10) + factorial(num % 10) == num) :
list1.append(num)
num += 1
else :
num += 1
print(list1)
#获取数值的阶乘
def factorial(num) :
temp = 1
while num > 1 :
temp *= num
num -= 1
return temp
from functools import reduce
def getSum(n):
sum1 = 0
for i in str(n):
if i != "0":
sum1 += reduce(lambda x,y:x*y,range(1,int(i)+1))
return sum1
def fun158():
list1 = []
for n in range(100,1000):
if n == getSum(n):
list1.append(n)
return list1
print(fun158())
def jie(n):
sum1=1
for i in range(1,n+1):
sum1*=i
return sum1
def fun106():
for i in range(100,1000):
a=str(i)
if jie(int(a)) + jie(int(a)) +jie(int(a)) == i:
print(i)