如何在java中计算和显示大数字

时间:2014-11-28 13:17:07

标签: java

如何在java中计算和显示大数字的所有数字,例如9999!(因子9999)?

请查看计算9999!的{​​{3}}并显示所有数字。

5 个答案:

答案 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类来提高程序的效率。