如何在java中计算和显示大数字的所有数字,例如9999!
(因子9999)?
请查看计算9999!
的{{3}}并显示所有数字。
答案 0 :(得分:7)
使用BigInteger,他的限制是你的记忆
public static BigInteger factorial(BigInteger num) {
if (num.compareTo(new BigInteger("1")) < 0) {
return new BigInteger("1");
} else {
return factorial(num.subtract(new BigInteger("1"))).multiply(num) ;
}
}
答案 1 :(得分:4)
Java标准库提供了一个BigInteger
类,它可以表示无限的整数值(实际上,它们是有限的,但仅限于可用内存)。
答案 2 :(得分:4)
使用BigInteger; 9999!使用Java 8花了120毫秒。这是一个使用longs的版本,并将时间缩短了一半:
public static BigInteger factorial(int n) {
// Try first to use longs in calculating the factorial.
BigInteger result = BigInteger.ONE;
long factor = 1;
for (int i = n; i > 1; --i) {
if Long.MAX_VALUE / factor < i) { // Overflow?
result = result.multiply(BigInteger.valueOf(factor));
factor = i;
} else {
factor *= i;
}
}
return result.multiply(BigInteger.valueOf(factor));
}
答案 3 :(得分:2)
不是最快的,但也不是很慢。
public static BigInteger factorial(int n) {
BigInteger result = BigInteger.ONE;
for (int i = 2; i <= n; i++) {
result = result.multiply(BigInteger.valueOf(i));
}
return result;
}
答案 4 :(得分:1)
你可以使用字符串(是的,不要惊讶,你可以!)。一个程序可以用字符串创建,以乘以两个非常大的数字(这里我说的数字说长度为5000位,每个!) 我已经创建了它们用于加法和减法,并且为乘法创建它并不困难,我向你保证,虽然你会认为使用BigInteger会更快,但是使用Strings与BigInt相比将是超快的。
然而,我的中间部分,我使用StringBuilder类来提高程序的效率。