APL 中的阶乘数字和(Project Euler 20)

use*_*614 3 math largenumber digits apl

首先我发现+/\xe2\x8d\x8e\xc2\xa8\xe2\x8d\x95(!8)它给了我结果 9。但是如果我这样做100!,因为数字很大,我无法得到它。

\n

我收到\xe2\x8d\x8e\xc2\xa8\xe2\x8d\x95(!100)语法错误:\xe2\x8d\x8eSYNTAX ERROR

\n

还有其他方法可以解决这个问题吗?或者您可以建议我进行一些修改吗?

\n

小智 5

!100 是一个很大的数字,当您格式化它的结果时,您将得到一个以 E 表示法表示数字的字符串。

\n

\xe2\x8d\x95!100\xe2\x86\x92 \'9.332621544E157\',当您尝试 eval ( \xe2\x8d\x8e) 每个字符时,您会遇到语法错误,因为 E 没有任何意义。

\n

有两种方法可以将大整数拆分为它的数字:

\n

首先是逆解码,例子可以在APLcart上找到

\n
    10\xe2\x8a\xa5\xe2\x8d\xa3\xc2\xaf1!100\n
Run Code Online (Sandbox Code Playgroud)\n

然而,这很容易受到浮点不精确的影响。

\n

第二个也是首选选项是使用 dfns 库中的 big,它可以使用quad 函数导入CY

\n

\'big\'\xe2\x8e\x95CY\'dfns\'

\n

例子在这里

\n

值得庆幸的是,最后一个例子涵盖了您的具体情况!100 的阶乘是\xe2\x86\x91\xc3\x97big/\xe2\x8d\xb3100

\n

该问题的最终解决方案可能如下所示:

\n

+/\xe2\x8d\x8e\xc2\xa8\xe2\x86\x91\xc3\x97big/\xe2\x8d\xb3100

\n

  • 也许展示如何导入“big”运算符,甚至可能展示如何使用它计算最终总和? (3认同)