🎄 4/25. 在 Perl 6 中使用大数

欢迎来到第4天的 Perl 6 One-Liner Advent Calendar!

今天我们会看一看欧拉项目的第十三个问题。我先给你展示一张截图:

img

实际上,它看起来很大,任务是找到一百个整数之和的前十位数,每个整数由50位数组成。

听起来像是一项任务,可能需要一些优化和简化来摆脱对结果的前十位无贡献的一切。 但不是在Perl 6中。

在Perl 6中,您可以简单地将数字相加并取其前十位数字:

1
2
3
4
5
<
37107287433902102798797998220837590246510135740250
# Other 98 numbers here
53503534526472524250874054075591789781264330331690
>.sum.substr(0, 10).say

Perl 6默认使用任意长整数运行; 您不需要包含任何模块或以其他方式激活此行为。 您甚至可以快速计算幂并获得结果:

1
$ perl6 -e'say 37107287433902102798797998220837590 ** 1000'

需要注意的另一件事是我们可以透明地将整数转换为数字,反之亦然。 在我们今天的程序中,数字列表显示为一对尖括号内的字符串的引用列表。

在列表中,您调用 sum 方法,该方法适用于数字。 获得总和后,再次将其视为字符串并提取其前十个字符。 整个代码看起来非常自然,易于阅读。

有了这种情绪,我们明天再见!