我刚刚开始使用D,并试图在D中编写一个简单的析因程序。有没有类似D中C++的向量?我想使用矢量来创建一个动态函数来计算阶乘。D语言中的析因
D语言中的析因
回答
在D中,动态数组可以调整大小,并且可以连接,就像C++中的矢量一样。 这里是与这种阵列的例子,其从stdin
读取和写入stdout
:
import std.stdio; // for readf and writeln
void main() // void for main means "int with return 0 at exit" to OS
{
int n;
readf (" %s", &n); // skip whitespace, then read int in default format
auto f = [1]; // a dynamic array of int containing a 1
foreach (i; 1..n + 1) // for i = 1, 2, 3, ..., n - 1, n
{
f ~= f[$ - 1] * i; // append to f its last element multiplied by i
}
writeln (f); // print the dynamic array in default format
}
对于输入
10
输出为:
[1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800]
作为评价所提到的,有关内置动态数组的更多信息,请参阅the documentation。
但是,目前尚不清楚什么是动态功能你提到。通常,我们不需要数组或向量来计算阶乘。 检查RosettaCode的几个其他方法来计算D的阶乘。
范围(发生器)的完美候选... – DejanLekic
@DejanLekic:是的,因数是事实上[std.range.recurrence]的一个例子(https://dlang.org/library/std/range/recurrence的.html)。但是,这个问题涉及数组出于某种原因。 – Gassa
为什么不使用std.bigint? - 它针对任意精度数值进行了优化。即使使用ulong
(2^64
),也只能计算20阶乘因子,对于此用例,内联表可能更有意义。下面是与BigInt
一个例子:
import std.bigint : BigInt;
BigInt factorial(int n)
{
auto b = BigInt(1);
foreach (i; 1..n + 1)
b *= i;
return b;
}
void main()
{
import std.stdio : writeln;
factorial(10).writeln; // 3628800
factorial(100).writeln; // 9.33 * 10^157
}
- 1. d语言线程
- 2. E语言支持D语言
- 3. D的MySQL语言绑定?
- 4. D编程语言中的C#事件
- 5. D编程语言IRC库
- 6. 通过D语言的值捕获Lambda
- 7. D编程语言字符数组
- 8. 应用开发与d语言
- 9. 从D语言调用C++(C)
- 10. D语言 - 线程vs产卵
- 11. 以D语言释放资源
- 12. 什么是'D'编程语言?
- 13. 文件I/O在d编程语言
- 14. Silverilght中的语言解析器
- 15. python中的多语言解析
- 16. OCaml中的语言词法分析器
- 17. Python语言的语法分析器
- 18. C语言的语义分析
- 19. 使用D语言读取文件中的字符
- 20. 无法将接口作为D语言中的指针传递
- 21. D编程语言中的Erlang风格并发性
- 22. 在D语言中用OpenGL 3渲染简单的矩形
- 23. D编程语言中的空字符串
- 24. 在现实世界中的D编程语言?
- 25. 序言自然语言解析
- 26. 解析D中的XML
- 27. 源代码语言分析
- 28. 解析自然语言
- 29. DOT语言解析器
- 30. 编程语言剖析器
我没有使用过D lang,但是您是否参考了[documentation](https://dlang.org/spec/spec.html)?它在文档中提到了有关动态数组[a](https://dlang.org/spec/arrays.html#dynamic-arrays)的内容。 –