如何解决阶乘非常大的位数 输出:说明
如何在42的阶乘中找到位数。阶乘超出了java中long的最终限制。这就是我找不到数字的原因。
42!
解决方法
42 的阶乘为 51 位,而 Java 中 long 数据类型的最大限制为 9,223,372,036,854,775,807,即只有 20 位。不过别担心,Java 有一个 Big Integer 类来存储大数字,例如 100!。但它比原始数据类型(例如 int、long 等)慢一点,因为它以数组的形式存储整数。有很多方法可以实现 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 举报,一经查实,本站将立刻删除。