PYTHON90小菜鸟 发表于 2018-3-3 18:57:48

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()

yunying12321 发表于 2018-3-3 21:04:21

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()            
      

Lis 发表于 2018-3-4 11:24:36

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)

sh1t灬 发表于 2018-3-4 21:36:08

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()

zeningqi 发表于 2018-3-5 08:27:43

哈哈

未启用 发表于 2018-3-5 10:18:39

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 14:50:50

本帖最后由 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)])
题目说明有点问题,“找出这样的三位数,其值等于其各位数字的阶乘。”
应该是:”各位数字阶乘的和”

inverseli 发表于 2018-3-5 20:15:28

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)

int_lyc 发表于 2018-3-5 21:15:52

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:40:32

本帖最后由 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:44:29

本帖最后由 雪人爱晒大太阳 于 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()

Andy0214 发表于 2018-3-7 08:38:34

pony马 发表于 2018-2-28 11:01


看了一下你的最简洁,完美

Andy0214 发表于 2018-3-7 08:55:49

LargeCat 发表于 2018-2-28 12:53
结果:
1*2*3*4*5=120
1*2*3*4*5*6=720


看着有些复杂,懵逼

Andy0214 发表于 2018-3-7 09:02:21

8306最硬 发表于 2018-2-28 14:40
是各阶乘之和么

牛逼,简洁

Andy0214 发表于 2018-3-7 09:06:39

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)

8306最硬 发表于 2018-3-7 20:19:40

Andy0214 发表于 2018-3-7 09:02
牛逼,简洁

导进了factorial 函数算是偷懒了hah

bigstar 发表于 2018-4-2 12:55:29

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))

foxiangzun 发表于 2019-1-19 18:42:27

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

咕咕鸡鸽鸽 发表于 2019-5-5 15:19:52

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())

小贤啊哦 发表于 2020-6-4 16:55:00

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)
   
页: 1 2 3 [4]
查看完整版本: Python:每日一题 158