微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

阶乘非常大的位数 输出:说明

如何解决阶乘非常大的位数 输出:说明

如何在42的阶乘中找到位数。阶乘超出了java中long的最终限制。这就是我找不到数字的原因。

42!

解决方法

42 的阶乘为 51 位,而 Java 中 long 数据类型的最大限制为 9,223,372,036,854,775,807,即只有 20 位。不过别担心,Java 有一个 Big Integer 类来存储大数字,例如 100!。但它比原始数据类型(例如 intlong 等)慢一点,因为它以数组的形式存储整数。有很多方法可以实现 Big Integer 类,但这里是最常用的方法。此代码计算 42 的阶乘并打印相同的 -

    // Java program to find large factorials using BigInteger
import java.math.BigInteger;

public class Factorial
{
// Returns Factorial of N
static BigInteger factorial(int N)
{
BigInteger fact = new BigInteger("1"); // Or BigInteger.ONE

// Multiply f with 2,3,...N
for (int i = 2; i <= N; i++)
fact = fact.multiply(BigInteger.valueOf(i));

return fact;
}


public static void main(String args[])
{
int N = 42;
System.out.println(factorial(N));
}
}

输出:

1405006117752879898543142606244511569936384000000000

说明

我们必须导入存储在 java.math 包中的 Big Integer 类。我已将文件命名为 Factorial.java,因此我的类名是 Factorial。 在这个方法中,我创建了一个函数,如果你想要没有函数的代码,请在下面评论。现在在这个语法中 - BigInteger f = new BigInteger("1");

我已将 fact 指定为等于 1 的大整数。在 for 循环中, i 值设置为 2 s 1*1=1。

fact = fact.multiply(BigInteger.valueOf(i));

以上语法用于大整数的乘法。这将 Biginteger fact 乘以 i

看看这篇 GeeksforGeeks 文章 - https://www.geeksforgeeks.org/biginteger-class-in-java/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。