user3893798
user3893798

Reputation:

How to calculate and display large numbers in java

How could I calculate and display all digits of large numbers like 9999! (factorial of 9999) in java?

Take a look at this url which calculates 9999! and dislays all digits.

Upvotes: 5

Views: 1675

Answers (5)

weston
weston

Reputation: 54791

Not the fastest, but not really slow either.

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;
}

Upvotes: 2

Joop Eggen
Joop Eggen

Reputation: 109557

Use BigInteger; 9999! took 120 ms with Java 8. Here is a version that uses longs, and halves that time:

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));
}

Upvotes: 4

Sarthak Mittal
Sarthak Mittal

Reputation: 6104

You can use Strings (yes don't get astonished, you can!). A program can be created in strings to multiply two very large numbers (here i am talking about numbers say 5000 digits in length, each!) I have already created them for addition and subtraction and it's not that hard to create it for Multiplication and i assure you that, though you will think that using BigInteger will be faster, but using Strings would be Ultrafast as compared to BigInt.

And the thing that slipped my mid, i used StringBuilder class to make the program more efficient.

Upvotes: 1

Ismael Di Vita
Ismael Di Vita

Reputation: 1836

Use BigInteger, his limit is your memory

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) ;
    }
}

Upvotes: 7

Hoopje
Hoopje

Reputation: 12932

The Java standard library provide a BigInteger class, which can represent unlimited integer values (actually, they are limited, but only by available memory).

Upvotes: 4

Related Questions