APL 中的阶乘数字和(欧拉计划 20)
Factorial digit sum in APL (Project Euler 20)
首先我找到了+/⍎¨⍕(!8)
,它给了我结果9。但是如果我这样做100!
,因为数字很大,我无法得到它。
使用 ⍎¨⍕(!100)
我收到语法错误:⍎SYNTAX ERROR
有没有其他方法可以解决这个问题,或者你能建议我做一些修改吗?
!100 是一个很大的数字,当您格式化它的结果时,您将得到一个字符串,表示 E 表示法中的数字。
⍕!100
→ '9.332621544E157'
,当您尝试评估 (⍎
) 每个字符时,您 运行 陷入语法错误,因为 E 没有意义。
有两种方法可以将大整数拆分成数字:
先用反解码,例子可以在APLcart
上找到
10⊥⍣¯1!100
然而,这容易受到浮点不精确的影响。
第二个也是首选选项是使用 dfns 库中的 big,它可以使用 quad 函数导入 CY
。
'big'⎕CY'dfns'
例子here
谢天谢地,最后一个示例涵盖了您的确切案例!阶乘 100 是 ↑×big/⍳100
问题的最终解决方案可能如下所示:
+/⍎¨↑×big/⍳100
首先我找到了+/⍎¨⍕(!8)
,它给了我结果9。但是如果我这样做100!
,因为数字很大,我无法得到它。
使用 ⍎¨⍕(!100)
我收到语法错误:⍎SYNTAX ERROR
有没有其他方法可以解决这个问题,或者你能建议我做一些修改吗?
!100 是一个很大的数字,当您格式化它的结果时,您将得到一个字符串,表示 E 表示法中的数字。
⍕!100
→ '9.332621544E157'
,当您尝试评估 (⍎
) 每个字符时,您 运行 陷入语法错误,因为 E 没有意义。
有两种方法可以将大整数拆分成数字:
先用反解码,例子可以在APLcart
上找到 10⊥⍣¯1!100
然而,这容易受到浮点不精确的影响。
第二个也是首选选项是使用 dfns 库中的 big,它可以使用 quad 函数导入 CY
。
'big'⎕CY'dfns'
例子here
谢天谢地,最后一个示例涵盖了您的确切案例!阶乘 100 是 ↑×big/⍳100
问题的最终解决方案可能如下所示:
+/⍎¨↑×big/⍳100