擅长:python、mysql、java
<p>因为您只使用0..9的阶乘,所以不需要使用函数来计算它们,更不用说递归的了。您只需硬编码所有10个值:</p>
<pre><code>facts = {'0': 1, '1': 1, '2': 2, '3': 6, '4': 24, '5': 120, '6': 720, '7': 5040, '8': 40320, '9': 362880}
</code></pre>
<p>然后简单地使用:</p>
^{pr2}$
<p>通过避免字符串转换,可以挤出更多的循环:</p>
<pre><code>facts2 = [1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880]
def is_strong2(n):
s, k = 0, n
while k:
s += facts2[k % 10]
k //= 10
return s == n
</code></pre>
<p>……但鉴于<a href="https://oeis.org/A014080" rel="nofollow noreferrer">proven</a>在<code>1, 2, 145, 40585</code>旁边没有这样的数字,整个企业看起来有点毫无意义;)</p>