0

個々の桁の階乗の合計が数値自体と等しい場合、数値は強い数値です。例:145 = 1!+ 4!+5!

私はこれのためにPythonで次のコードを書きました:

import math
def strong_num():
    return [x for x in range(1,1000) if x==int(reduce(lambda p,q:math.factorial(int(p))+math.factorial(int(q)),str(x)))]

print strong_num()

しかし、通訳は二度と戻りませんか?このコードの何が問題になっていますか?

4

5 に答える 5

6

reduce入力が間違っているので、の階乗を計算しないでくださいp。実際、使用する方が簡単ですsum

return [x for x in range(1, 1000) 
          if x == sum(math.factorial(int(q)) for q in str(x))]

このfunctools.reduce関数は次のように考えることができます。

reduce(f, [a, b, c, d, ...]) == f(f(f(a, b), c), d) ...

したがって、たとえば、x == 145の場合、reduceパーツは次のように計算します。

   int(reduce(lambda p, q: factorial(int(p)) + factorial(int(q)), str(x)))
== int(reduce(lambda p, q: factorial(int(p)) + factorial(int(q)), "145"))
== int(factorial(factorial(1) + factorial(4)) + factorial(5))
== int(factorial(1 + 24) + 120)
== int(15511210043330985984000000 + 120)
== 15511210043330985984000120

非常に大きな数の階乗を計算する必要があるため、インタプリタが終了しない可能性があります((2×9!)を検討してください!...)

それでも保持する必要がある場合はreduce、次のように変更する必要があります。

 reduce(lambda p,q: p + math.factorial(int(q)),  str(x),  0)
#                   ^                                     ^
#                   No need to factorial                  Add initializer too
于 2012-10-31T06:33:38.603 に答える
0

ストロングナンバーとは?

強い数とは、桁の階乗の合計が元の数と等しい数です。 例: 145は強い数字です。以来、1!+ 4!+ 5!= 145

num = int(input("Enter any number"))
user_given_no=num
i = 0
fact = 1
fact_list = []
diff_no = []
while num != 0:
    i = num % 10
    num = num//10
    diff_no.append(i)


for y in diff_no:

    x = y
    fact = 1
    while x != 0:
        fact *= x

        x -= 1
    fact_list.append(fact)

sum = 0
for x in fact_list:
    sum += x

if sum == user_given_no:
    print("Strong number")
else:
   print("Not a Strong number")
于 2019-02-26T10:44:08.360 に答える
0

強い数とは、桁の階乗の合計が元の数と等しい数です。 だから、ここでPythonのリストから強い数字を見つけるための簡単なプログラム。

def factorial(number):
    if(number == 0 or number == 1):
        fact = 1
    else:
        fact = number * factorial(number - 1)
    return fact

def strong_number(list):
    new_list=[]
    for x in list:
        temp = x
        sum = 0
        while(temp):
            rem = temp % 10
            sum += factorial(rem)
            temp = temp // 10
        if(sum == x):
           new_list.append(x)
        else:
           pass  
    return new_list

# Example 1
val_list = [1,2,5,145,654,34]
strong_num_list = strong_number(val_list)
print(strong_num_list)
# Example 2 and this will return an empty list as there is no strong number found in 
the list that is passed
val_list2 = [5,10,14,34,45]
strong_num_list = strong_number(val_list2)
print(strong_num_list)

ここで、リストを渡したくない場合は、関数strong_numberからforループを削除するだけです。ハッピーラーニング!!!

于 2019-06-17T02:46:10.247 に答える
0
import math
x=(input("enter the number\n"))

y=[int(i) for i in x]
#print("digits of the entered number:\n",y)

z=list((math.factorial(i) for i in y))
#print("factorial of each digit of given number:\n",z)

z=sum(z)
#print("sum of factorials of each digit of the given number:\n",z)


if z==int(x): print(x,"is a Strong Number")
else: print(x,"is not a Strong Number ")    
于 2021-05-28T07:19:49.613 に答える
-1

数値をその構成桁に適切に分解していません。整数のリストに対してラムダを操作するにはreduceが必要であり、str(x)は整数のリストを生成しません。

于 2012-10-31T06:45:36.197 に答える