擅长:python、mysql、java
<ol>
<li><p>您可以简单地记住<code>factorial</code>函数来加快处理速度</p>
<pre><code>from functools import lru_cache
@lru_cache(maxsize=128)
def factorial(number):
if number <= 1:
return 1
else:
return number * factorial(number - 1)
</code></pre></li>
<li><p>同样,你可以用一个生成器来得到下一个数字</p>
^{pr2}$
<p>这样可以避免创建断断续续的字符串列表。</p></li>
</ol>
<hr/>
<p>注:这些都是一些小的优化,可能不会大大提高程序的性能。在</p>
<p><strong>整体代码</strong></p>
<pre><code>from functools import lru_cache
@lru_cache(maxsize=128)
def factorial(number):
if number <= 1:
return 1
else:
return number * factorial(number - 1)
def get_next_digit(num):
while num:
yield num % 10
num //= 10
def is_strong_number(num):
return sum(factorial(digit) for digit in get_next_digit(num)) == num
def find_strong_numbers(num_list):
return [num for num in num_list if is_strong_number(num)]
num_list = [145, 375, 100, 2, 10]
print(find_strong_numbers(num_list))
</code></pre>