存储大于20的数字! (阶乘)

我想找到100!的数字100! (阶乘)但20!20! 它会给出一个错误,因为该值太大而无法处理。 我该如何存储这样的号码?

20阶乘是19位数。 100阶乘长158位,占用500位! 它实际上是:

 933262154439441526816992388562667004907159682643816214685929638952175999932299156089414639761565182862536979208272237582511852109168640000000000000000 00000000 

这里没有一种标准类型适合你,你需要做的是实现你自己的例程来处理这么大的数字。

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

这是在8位处理器时代计算大数的同时实践。 它被称为任意精确的arithemtic。

这是一个描述如何完成的链接。 不可否认,这是汇编程序,但它仍然适用于此。 您需要考虑系统上int的默认大小。

至少在Linux上,一个可能的多精度库可能是GMP (它也适用于Solaris,Windows,MacOSX等……)。

你会怎么在纸上做?
使用长度为160位的数字进行乘法对计算机来说并不难。

尝试编写自己的函数或使用现有的库。

此代码最多可帮助170! 。 使用double作为阶乘函数,因为普通的int或long int不支持该阶乘结果,double将支持最多1.7e308

 #include double fact(int k){ int i; double f=1; for(i=1;i<=k;i++) f=f*i; return (f); } int main(){ int i; for(i=1;i<=65;i++) printf("%d! = %.3lf\n",i,fact(i)); return 0; }