If the precision of the basic integer and floating-point types is not sufficient, you can turn to a couple of handy classes in the java.math package, called BigInteger and BigDecimal. These are classes for manipulating numbers with an arbitrarily long sequence of digits. The BigInteger class implements arbitrary precision integer arithmetic, and BigDecimal does the same for floating-point numbers. Use the static valueOf method to turn an ordinary number into a big number:

BigInteger a = BigInteger.valueOf(100);

Unfortunately, you cannot use the familiar mathematical operators such as + and * to combine big numbers. Instead, you must use methods such as add and multiply in the big number classes.

BigInteger c = a.add(b); // c = a + b BigInteger d = c.multiply(b.add(BigInteger.valueOf(2)));
 // d = c * (b + 2)

Java graphics cplus_icon

Unlike C++, Java has no programmable operator overloading. There was no way for the programmer of the BigInteger class to redefine the + and * operators to give the add and multiply operations of the BigInteger classes. The language designers did overload the + operator to denote concatenation of strings. They chose not to overload other operators, and they did not give Java programmers the opportunity to overload operators themselves. shows a modification of the lottery odds program of , updated to work with big numbers. For example, if you are invited to participate in a lottery in which you need to pick 60 numbers out of a possible 490 numbers, then this program will tell you that your odds are 1 in 716395843461995557415116222540092933411717612789263493493351 013459481104668848. Good luck! The program in computed the following statement:

lotteryOdds = lotteryOdds * (n - i + 1) / i;

When using big numbers, the equivalent statement becomes:

lotteryOdds = lotteryOdds.multiply(BigInteger.valueOf(n - i + 1))
 .divide(BigInteger.valueOf(i));

Example BigIntegerTest.java

 1. import javax.swing.*;
 2. import java.math.*;
 3.
 4. public class BigIntegerTest
 5. {
 6. public static void main(String[] args)
 7. {
 8. String input = JOptionPane.showInputDialog
 9. ("How many numbers do you need to draw?");
10. int k = Integer.parseInt(input);
11.
12. input = JOptionPane.showInputDialog
13. ("What is the highest number you can draw?");
14. int n = Integer.parseInt(input);
15.
16. /*
17. compute binomial coefficient
18. n * (n - 1) * (n - 2) * . . . * (n - k + 1)
19. -------------------------------------------
20. 1 * 2 * 3 * . . . * k
21. */
22.
23. BigInteger lotteryOdds = BigInteger.valueOf(1);
24.
25. for (int i = 1; i <= k; i++)
26. lotteryOdds = lotteryOdds
27. .multiply(BigInteger.valueOf(n - i + 1))
28. .divide(BigInteger.valueOf(i));
29.
30. System.out.println("Your odds are 1 in " + lotteryOdds +
31. ". Good luck!");
32.
33. System.exit(0);
34. }
35. }

java.math.BigInteger 1.1

Java graphics api_icon

java.math.BigDecimal 1.1

Java graphics api_icon