c - 存储一个大于20的数字! (阶乘)

标签 c

我试图找到 100! 之前的数字(阶乘),但在 20! 之后它给出了一个错误,因为该值太大而无法处理。我如何存储这样的数字?

最佳答案

20 阶乘的长度为 19 位。 100阶乘长158位,占500位!它实际上是:

933262154439441526816992388562667004907159682643816214685929638952175999932299156089414639761565182862536979208272237582511852109168640000000000000000
00000000

这里没有任何标准类型适合您,您必须执行自己的例程来处理如此大的数字。

例如,您需要接受将两个 32 位值相乘可能会产生 64 位结果。

这是在 8 位处理器时代计算大数的常见做法。 它被称为 arbitrary precision arithemtic.

Here的链接来描述这是如何完成的。不可否认,它是针对汇编程序的,但在这里仍然适用。您需要考虑系统上 int 的默认大小。

关于c - 存储一个大于20的数字! (阶乘),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8133984/

相关文章:

c - 基本 C 位运算示例

c - C 总是将 char 数组中的最后一个元素初始化为零吗?

c++ - 使用 and 运算符进行微优化

c - 在第 6731 次释放指针后双重释放或损坏

c - 在 libgit2 中使用 SSH 身份验证

创建一个函数并在主程序中调用它

C循环递增

c - 如何读取文本文件的内容并返回我指定的两个字符串之间的字符串?

c++ - 当位(而不是字节)的顺序至关重要时的字节序

c - 为什么使用GDB检查时,某些局部变量没有列在相应的堆栈帧中?